mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-04 12:52:28 +08:00
49 KiB
49 KiB
lancet(柳叶刀)是一个全面、高效、可复用的go语言工具函数库。 lancet受到了java apache common包和lodash.js的启发。
简体中文 | English
特性
- 👏 全面、高效、可复用
- 💪 300+常用 go 工具函数,支持 string、slice、datetime、net、crypt...
- 💅 只依赖 go 标准库
- 🌍 所有导出函数单元测试覆盖率 100%
安装
Note:
- 使用 go1.18 及以上版本的用户,建议安装 v2.x.x。 因为 v2.x.x 应用 go1.18 的泛型重写了大部分函数。
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
- 使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.3.5。
go get github.com/duke-git/lancet@v1.3.5 // 使用go1.18以下版本, 必须安装v1.x.x版本
用法
lancet 是以包的结构组织代码的,使用时需要导入相应的包名。例如:如果使用字符串相关函数,需要导入 strutil 包:
import "github.com/duke-git/lancet/v2/strutil"
例子
此处以字符串工具函数 Reverse(逆序字符串)为例,需要导入 strutil 包:
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/strutil"
)
func main() {
s := "hello"
rs := strutil.Reverse(s)
fmt.Println(rs) //olleh
}
文档
1. algorithm 包实现一些基本查找和排序算法。
import "github.com/duke-git/lancet/v2/algorithm"
Function list:
- BubbleSort : 使用冒泡排序算法对切片进行排序。 [doc] [play]
- CountSort : 使用计数排序算法对切片进行排序。不改变原数据。 [doc] [play]
- HeapSort : 使用堆排序算法对切片进行排序。 [doc] [play]
- InsertionSort : 使用插入排序算法对切片进行排序。 [doc] [play]
- MergeSort : 使用合并排序算法对切片进行排序。 [doc] [play]
- QuickSort : 使用快速排序算法对切片进行排序。 [doc] [play]
- SelectionSort : 使用选择排序算法对切片进行排序。 [doc] [play]
- ShellSort : 使用希尔排序算法对切片进行排序。 [doc] [play]
- BinarySearch : 返回排序切片中目标值的索引,使用二分搜索(递归调用)。 [doc] [play]
- BinaryIterativeSearch :返回排序切片中目标值的索引,使用二分搜索(非递归)。 [doc] [play]
- LinearSearch : 基于传入的相等函数返回切片中目标值的索引。(线性查找) [doc]
- LRUCache : 应用 lru 算法实现内存缓存. [doc] [play]
2. concurrency 包含一些支持并发编程的功能。例如:goroutine, channel, async 等。
import "github.com/duke-git/lancet/v2/concurrency"
Function list:
- NewChannel : 返回一个 Channel 指针实例。 [doc]
- Bridge : 将多个 channel 链接到一个 channel,直到取消上下文。 [doc]
- FanIn : 将多个 channel 合并为一个 channel,直到取消上下文。 [doc]
- Generate : 根据传入的值,生成 channel。 [doc]
- Or : 将一个或多个 channel 读取到一个 channel 中,当任何读取 channel 关闭时将结束读取。 [doc]
- OrDone : 将一个 channel 读入另一个 channel,直到取消上下文。 [doc]
- Repeat : 返回一个 channel,将参数
values重复放入 channel,直到取消上下文。 [doc] - RepeatFn : 返回一个 channel,重复执行函数 fn,并将结果放入返回的 channel,直到取消上下文。 [doc]
- Take : 返回一个 channel,其值从另一个 channel 获取,直到取消上下文。 [doc]
- Tee : 将一个 channel 分成两个 channel,直到取消上下文。 [doc]
3. condition 包含一些用于条件判断的函数。
import "github.com/duke-git/lancet/v2/condition"
Function list:
- Bool : 返回传入参数的 bool 值。 [doc] [play]
- And : 逻辑且操作,当切仅当 a 和 b 都为 true 时返回 true。 [doc] [play]
- Or : 逻辑或操作,当切仅当 a 和 b 都为 false 时返回 false。 [doc] [play]
- Xor : 逻辑异或操作,a 和 b 相同返回 false,a 和 b 不相同返回 true [doc] [play]
- Nor : 异或的取反操作。 [doc] [play
- Xnor : 如果 a 和 b 都是真的或 a 和 b 均是假的,则返回 true。 [doc] [play]
- Nand : 如果 a 和 b 都为真,返回 false,否则返回 true [doc] [play]
- TernaryOperator : 三元运算符。 [doc] [play]
4. convertor 转换器包支持一些常见的数据类型转换。
import "github.com/duke-git/lancet/v2/convertor"
函数列表:
- ColorHexToRGB : 颜色值十六进制转 rgb。 [doc] [play]
- ColorRGBToHex : 颜色值 rgb 转十六进制。 [doc] [play]
- ToBool : 字符串转布尔类型,使用 strconv.ParseBool。 [doc] [play]
- ToBytes : interface 转字节切片。 [doc] [play]
- ToChar : 字符串转字符切片。 [doc] [play]
- ToChannel : 将切片转为只读 channel。 [doc] [play]
- ToFloat : 将 interface 转成 float64 类型,如果参数无法转换,会返回 0.0 和 error。 [doc] [play]
- ToInt : 将 interface 转成 int64 类型,如果参数无法转换,会返回 0 和 error。 [doc] [play]
- ToJson : 将 interface 转成 json 字符串,如果参数无法转换,会返回""和 error。 [doc] [play]
- ToMap : 将切片转为 map。 [doc] [play]
- ToPointer : 返回传入值的指针。 [doc] [play]
- ToString : 将值转换为字符串,对于数字、字符串、[]byte,将转换为字符串。 对于其他类型(切片、映射、数组、结构)将调用 json.Marshal。 [doc] [play]
- StructToMap : 将 struct 转成 map,只会转换 struct 中可导出的字段。 [doc] [play]
- MapToSlice : map 中 key 和 value 执行函数 iteratee 后,转为切片。 [doc] [play]
- EncodeByte : 将传入的 data 编码成字节切片。 [doc] [play]
- DecodeByte : 解码字节切片到目标对象,目标对象需要传入一个指针实例。 [doc] [play]
5. cryptor 加密包支持数据加密和解密,获取 md5,hash 值。支持 base64, md5, hmac, aes, des, rsa。
import "github.com/duke-git/lancet/v2/cryptor"
函数列表:
- AesEcbEncrypt
- AesEcbDecrypt
- AesCbcEncrypt
- AesCbcDecrypt
- AesCtrCrypt
- AesCfbEncrypt
- AesCfbDecrypt
- AesOfbEncrypt
- AesOfbDecrypt
- Base64StdEncode
- Base64StdDecode
- DesEcbEncrypt
- DesEcbDecrypt
- DesCbcEncrypt
- DesCbcDecrypt
- DesCtrCrypt
- DesCfbEncrypt
- DesCfbDecrypt
- DesOfbEncrypt
- DesOfbDecrypt
- HmacMd5
- HmacSha1
- HmacSha256
- HmacSha512
- Md5String
- Md5File
- Sha1
- Sha256
- Sha512
- GenerateRsaKey
- RsaEncrypt
- RsaDecrypt
6. datetime 日期时间处理包,格式化日期,比较日期。
import "github.com/duke-git/lancet/v2/datetime"
函数列表:
- AddDay
- AddHour
- AddMinute
- BeginOfMinute
- BeginOfHour
- BeginOfDay
- BeginOfWeek
- BeginOfMonth
- BeginOfYear
- EndOfMinute
- EndOfHour
- EndOfDay
- EndOfWeek
- EndOfMonth
- EndOfYear
- GetNowDate
- GetNowTime
- GetNowDateTime
- GetZeroHourTimestamp
- GetNightTimestamp
- FormatTimeToStr
- FormatStrToTime
- NewUnix
- NewUnixNow
- NewFormat
- NewISO8601
- ToUnix
- ToFormat
- ToFormatForTpl
- ToIso8601
7. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph.
import list "github.com/duke-git/lancet/v2/datastructure/list"
import link "github.com/duke-git/lancet/v2/datastructure/link"
import stack "github.com/duke-git/lancet/v2/datastructure/stack"
import queue "github.com/duke-git/lancet/v2/datastructure/queue"
import set "github.com/duke-git/lancet/v2/datastructure/set"
import tree "github.com/duke-git/lancet/v2/datastructure/tree"
import heap "github.com/duke-git/lancet/v2/datastructure/heap"
import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"
Function list:
8. fileutil 包含文件基本操作。
import "github.com/duke-git/lancet/v2/fileutil"
函数列表:
- ClearFile : 清空文件内容。 [doc] [play]
- CreateFile : 创建文件,创建成功返回 true, 否则返回 false。 [doc] [play]
- CreateDir : 创建嵌套目录,例如/a/, /a/b/。 [doc] [play]
- CopyFile :拷贝文件,会覆盖原有的文件。 [doc] [play]
- FileMode : 获取文件 mode 信息。 [doc] [play]
- MiMeType : 获取文件 mime 类型, 参数的类型必须是 string 或者*os.File。 [doc] [play]
- IsExist : 判断文件或目录是否存在。 [doc] [play]
- IsLink : 判断文件是否是符号链接。 [doc] [play]
- IsDir : 判断参数是否是目录。 [doc] [play]
- ListFileNames : 返回目录下所有文件名。 [doc] [play]
- RemoveFile : 删除文件。 [doc] [play]
- ReadFileToString : 读取文件内容并返回字符串。 [doc] [play]
- ReadFileByLine : 按行读取文件内容,返回字符串切片包含每一行。 [doc] [play]
- Zip : zip 压缩文件, 参数可以是文件或目录。 [doc] [play]
- UnZip : zip 解压缩文件并保存在目录中。 [doc] [play]
9. formatter 格式化器包含一些数据格式化处理方法。
import "github.com/duke-git/lancet/v2/formatter"
函数列表:
10. function 函数包控制函数执行流程,包含部分函数式编程。
import "github.com/duke-git/lancet/v2/function"
函数列表:
11. maputil 包括一些操作 map 的函数.
import "github.com/duke-git/lancet/v2/maputil"
函数列表:
- ForEach : 对 map 中的每对 key 和 value 执行 iteratee 函数。 [doc] [play]
- Filter : 迭代 map 中的每对 key 和 value,返回 map,其中的 key 和 value 符合 predicate 函数。 [doc] [play]
- Intersect : 多个 map 的交集操作。 [doc] [play]
- Keys : 返回 map 中所有 key 组成的切片。 [doc] [play]
- Merge : 合并多个 map, 相同的 key 会被之后的 key 覆盖。 [doc] [play]
- Minus : 返回一个 map,其中的 key 存在于 mapA,不存在于 mapB。 [doc] [play]
- Values : 返回 map 中所有 values 组成的切片 [doc] [play]
- IsDisjoint : 验证两个 map 是否具有不同的 key。 [doc] [play]
12. mathutil 包实现了一些数学计算的函数。
import "github.com/duke-git/lancet/v2/mathutil"
Function list:
- Average :计算平均数,可能需要对结果调用 RoundToFloat 方法四舍五入。 [doc] [play]
- Exponent : 指数计算(x 的 n 次方)。 [doc] [play]
- Fibonacci :计算斐波那契数列的第 n 个数。 [doc] [play]
- Factorial : 计算阶乘。 [doc] [play]
- Max : 返回参数中的最大数。 [doc] [play]
- MaxBy : 使用给定的比较器函数返回切片的最大值。 [doc] [play]
- Min : 返回参数中的最小数。 [doc] [play]
- MinBy : 使用给定的比较器函数返回切片的最小值。 [doc] [play]
- Percent : 计算百分比,可以指定保留 n 位小数。 [doc]
- RoundToFloat : 四舍五入,保留 n 位小数,返回 float64。 [doc] [play]
- RoundToString : 四舍五入,保留 n 位小数,返回 string。 [doc] [play]
- TruncRound : 截短 n 位小数(不进行四舍五入)。 [doc] [play]
13. netutil 网络包支持获取 ip 地址,发送 http 请求。
import "github.com/duke-git/lancet/v2/netutil"
函数列表:
- ConvertMapToQueryString
- GetInternalIp
- EncodeUrl
- GetIps
- GetMacAddrs
- GetPublicIpInfo
- GetRequestPublicIp
- IsPublicIP
- IsInternalIP
- HttpRequest
- HttpClient
- SendRequest
- DecodeResponse
- StructToUrlValues
- HttpGetdeprecated
- HttpDeletedeprecated
- HttpPostdeprecated
- HttpPutdeprecated
- HttpPatchdeprecated
- ParseHttpResponse
14. random 随机数生成器包,可以生成随机[]bytes, int, string。
import "github.com/duke-git/lancet/v2/random"
函数列表:
- RandBytes : 生成随机字节切片。 [doc] [play]
- RandInt : 生成随机int, 范围[min, max)。 [doc] [play]
- RandString : 生成给定长度的随机字符串,只包含字母(a-zA-Z)。 [doc] [play]
- RandUpper : 生成给定长度的随机大写字母字符串(A-Z)。 [doc] [play]
- RandLower : 生成给定长度的随机小写字母字符串(a-z)。 [doc] [play]
- RandNumeral : 生成给定长度的随机数字字符串(0-9)。 [doc] [play]
- RandNumeralOrLetter : 生成给定长度的随机字符串(数字+字母)。 [doc] [play]
- UUIdV4 : 生成UUID v4字符串。 [doc] [play]
15. retry 重试执行函数直到函数运行成功或被 context cancel。
import "github.com/duke-git/lancet/v2/retry"
函数列表:
16. slice 包含操作切片的方法集合。
import "github.com/duke-git/lancet/v2/slice"
函数列表:
- AppendIfAbsent
- Contain
- ContainSubSlice
- Chunk
- Compact
- Concat
- Count
- CountBy
- Difference
- DifferenceBy
- DifferenceWith
- DeleteAt
- Drop
- Every
- Filter
- Find
- FindLast
- Flatten
- FlattenDeep
- ForEach
- GroupBy
- GroupWith
- IntSlicedeprecated
- InterfaceSlicedeprecated
- Intersection
- InsertAt
- IndexOf
- LastIndexOf
- Map
- Merge
- Reverse
- Reduce
- Replace
- ReplaceAll
- Repeat
- Shuffle
- Sort
- SortBy
- SortByFielddeprecated
- Some
- StringSlicedeprecated
- SymmetricDifference
- ToSlice
- ToSlicePointer
- Unique
- UniqueBy
- Union
- UniqueBy
- UpdateAt
- Without
- KeyBy
17. strutil 包含字符串处理的相关函数。
import "github.com/duke-git/lancet/v2/strutil"
函数列表:
- After : 返回源字符串中指定字符串首次出现时的位置之后的子字符串。 [doc] [play]
- AfterLast : 返回源字符串中指定字符串最后一次出现时的位置之后的子字符串。 [doc] [play]
- Before : 返回源字符串中指定字符串第一次出现时的位置之前的子字符串。 [doc] [play]
- BeforeLast : 返回源字符串中指定字符串最后一次出现时的位置之前的子字符串。 [doc] [play]
- CamelCase : 将字符串转换为 CamelCase 驼峰式字符串, 非字母和数字会被忽略。 [doc] [play]
- Capitalize : 将字符串的第一个字符转换为大写。 [doc] [play]
- IsString : 判断传入参数的数据类型是否为字符串。 [doc] [play]
- KebabCase : 将字符串转换为 kebab-case 形式字符串, 非字母和数字会被忽略。 [doc] [play]
- UpperKebabCase : 将字符串转换为大写 KEBAB-CASE 形式字符串, 非字母和数字会被忽略。 [doc] [play]
- LowerFirst : 将字符串的第一个字符转换为小写形式。 [doc] [play]
- UpperFirst : 将字符串的第一个字符转换为大写形式。 [doc] [play]
- PadEnd : 如果字符串短于限制大小,则在右侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [doc] [play]
- PadStart : 如果字符串短于限制大小,则在左侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [doc] [play]
- Reverse : 返回字符顺序与给定字符串相反的字符串。 [doc] [play]
- SnakeCase : 将字符串转换为 snake_case 形式, 非字母和数字会被忽略。 [doc] [play]
- UpperSnakeCase : 将字符串转换为大写 SNAKE_CASE 形式, 非字母和数字会被忽略。 [doc] [play]
- SplitEx : 拆分给定的字符串可以控制结果切片是否包含空字符串。 [doc] [play]
- Substring : 根据指定的位置和长度截取子字符串。 [doc]
- Wrap : 用给定字符包裹传入的字符串 [doc] [play]
- Unwrap : 从另一个字符串中解开一个给定的字符串。 将更改源字符串。 [doc] [play]
18. system 包含 os, runtime, shell command 的相关函数。
import "github.com/duke-git/lancet/v2/system"
函数列表:
- IsWindows : 检查当前操作系统是否是 windows。 [doc] [play]
- IsLinux : 检查当前操作系统是否是 linux。 [doc] [play]
- IsMac : 检查当前操作系统是否是 macos。 [doc] [play]
- GetOsEnv : 根据 key 获取对应的环境变量值 [doc] [play]
- SetOsEnv : 设置环境变量。 [doc] [play]
- RemoveOsEnv : 删除环境变量。 [doc] [play]
- CompareOsEnv : 换取环境变量并与传入值进行比较。 [doc] [play]
- ExecCommand : 执行 shell 命令。 [doc] [play]
- GetOsBits : 获取当前操作系统位数(32/64)。 [doc] [play]
19. validator 验证器包,包含常用字符串格式验证函数。
import "github.com/duke-git/lancet/v2/validator"
函数列表:
- ContainChinese
- ContainLetter
- ContainLower
- ContainUpper
- IsAlpha
- IsAllUpper
- IsAllLower
- IsBase64
- IsChineseMobile
- IsChineseIdNum
- IsChinesePhone
- IsCreditCard
- IsDns
- IsEmail
- IsEmptyString
- IsFloatStr
- IsNumberStr
- IsJSON
- IsRegexMatch
- IsIntStr
- IsIp
- IsIpV4
- IsIpV6
- IsStrongPassword
- IsUrl
- IsWeakPassword
- IsZeroValue
- IsGBK
20. xerror 包实现一些错误处理函数
import "github.com/duke-git/lancet/v2/xerror"
函数列表:
如何贡献代码
非常感激任何的代码提交以使 lancet 的功能越来越强大。创建 pull request 时请遵守以下规则。
- Fork lancet 仓库。
- 创建自己的特性分支。
- 提交变更。
- Push 分支。
- 创建新的 pull request。
