简介
lancet是一个全面、高效、可复用的go语言工具函数库。
github地址:https://github.com/duke-git/lancet
特性
- 全面、高效、可复用。
- 600+常用 go 工具函数,支持 string、slice、datetime、net、crypt...
- 只依赖 go 标准库和 golang.org/x。
- 所有导出函数单元测试覆盖率 100%。
函数库列表:algorithm 包实现一些基本查找和排序算法
- BubbleSort : 使用冒泡排序算法对切片进行排序。
- CountSort : 使用计数排序算法对切片进行排序。不改变原数据。
- HeapSort : 使用堆排序算法对切片进行排序。
- InsertionSort : 使用插入排序算法对切片进行排序。
- MergeSort : 使用合并排序算法对切片进行排序。
- QuickSort : 使用快速排序算法对切片进行排序。
- SelectionSort : 使用选择排序算法对切片进行排序。
- ShellSort : 使用希尔排序算法对切片进行排序。
- BinarySearch : 返回排序切片中目标值的索引,使用二分搜索(递归调用)。
- BinaryIterativeSearch :返回排序切片中目标值的索引,使用二分搜索(非递归)。
- LinearSearch : 基于传入的相等函数返回切片中目标值的索引。(线性查找)
- LRUCache : 应用 lru 算法实现内存缓存.
函数库列表:compare 包提供几个轻量级的类型比较函数。
- Equal : 检查两个值是否相等(检查类型和值)。
- EqualValue : 检查两个值是否相等(只检查值)。
- LessThan : 验证参数left的值是否小于参数right的值。
- GreaterThan : 验证参数left的值是否大于参数right的值。
- LessOrEqual : 验证参数left的值是否小于或等于参数right的值。
- GreaterOrEqual : 验证参数left的值是否大于或等于参数right的值。
- InDelta : 检查增量内两个值是否相等。
函数库列表:concurrency 包含一些支持并发编程的功能
- NewChannel : 返回一个 Channel 指针实例。
- Bridge : 将多个 channel 链接到一个 channel,直到取消上下文。
- FanIn : 将多个 channel 合并为一个 channel,直到取消上下文。
- Generate : 根据传入的值,生成 channel。
- Or : 将一个或多个 channel 读取到一个 channel 中,当任何读取 channel 关闭时将结束读取。
- OrDone : 将一个 channel 读入另一个 channel,直到取消上下文。
- Repeat : 返回一个 channel,将参数values重复放入 channel,直到取消上下文。
- RepeatFn : 返回一个 channel,重复执行函数 fn,并将结果放入返回的 channel,直到取消上下文。
- Take : 返回一个 channel,其值从另一个 channel 获取,直到取消上下文。
- Tee : 将一个 channel 分成两个 channel,直到取消上下文。
函数库列表:condition 包含一些用于条件判断的函数
- Bool : 返回传入参数的 bool 值。
- And : 逻辑且操作,当切仅当 a 和 b 都为 true 时返回 true。
- Or : 逻辑或操作,当切仅当 a 和 b 都为 false 时返回 false。
- Xor : 逻辑异或操作,a 和 b 相同返回 false,a 和 b 不相同返回 true
- Nor : 异或的取反操作。
- Xnor : 如果 a 和 b 都是真的或 a 和 b 均是假的,则返回 true。
- Nand : 如果 a 和 b 都为真,返回 false,否则返回 true
- TernaryOperator : 三元运算符。
函数库列表:convertor 转换器包支持一些常见的数据类型转换。
- ColorHexToRGB : 颜色值十六进制转 rgb。
- ColorRGBToHex : 颜色值 rgb 转十六进制。
- ToBool : 字符串转布尔类型,使用 strconv.ParseBool。
- ToBytes : interface 转字节切片。
- ToChar : 字符串转字符切片。
- ToChannel : 将切片转为只读 channel。
- ToFloat : 将 interface 转成 float64 类型,如果参数无法转换,会返回 0.0 和 error。
- ToInt : 将 interface 转成 int64 类型,如果参数无法转换,会返回 0 和 error。
- ToJson : 将 interface 转成 json 字符串,如果参数无法转换,会返回""和 error。
- ToMap : 将切片转为 map。
- ToPointer : 返回传入值的指针。
- ToString : 将值转换为字符串,对于数字、字符串、[]byte,将转换为字符串。 对于其他类型(切片、映射、数组、结构)将调用 json.Marshal。
- StructToMap : 将 struct 转成 map,只会转换 struct 中可导出的字段。
- MapToSlice : map 中 key 和 value 执行函数 iteratee 后,转为切片。
- EncodeByte : 将传入的 data 编码成字节切片。
- DecodeByte : 解码字节切片到目标对象,目标对象需要传入一个指针实例。
- DeepClone : 创建一个传入值的深拷贝, 无法克隆结构体的非导出字段。
- CopyProperties : 拷贝不同结构体之间的同名字段。
- ToInterface : 将反射值转换成对应的 interface 类型。
- Utf8ToGbk : utf8 编码转 GBK 编码。
- GbkToUtf8 : GBK 编码转 utf8 编码。
函数库列表:cryptor 加密包支持数据加密和解密,获取 md5,hash 值
- AesEcbEncrypt : 使用 AES ECB 算法模式加密数据。
- AesEcbDecrypt : 使用 AES ECB 算法模解密数据。
- AesCbcEncrypt : 使用 AES CBC 算法模式加密数据。
- AesCbcDecrypt : 使用 AES CBC 算法模式解密数据。
- AesCtrCrypt : 使用 AES CTR 算法模式加密/解密数据。
- AesCfbEncrypt : 使用 AES CFB 算法模式加密数据。
- AesCfbDecrypt : 使用 AES CFB 算法模式解密数据。
- AesOfbEncrypt : 使用 AES OFB 算法模式加密数据。
- AesOfbDecrypt : 使用 AES OFB 算法模式解密数据。
- Base64StdEncode : 将字符串 base64 编码。
- Base64StdDecode : 解码 base64 字符串。
- DesEcbEncrypt : 使用 DES ECB 算法模式加密数据。
- DesEcbDecrypt : 使用 DES ECB 算法模解密数据。
- DesCbcEncrypt : 使用 DES CBC 算法模式加密数据。
- DesCbcDecrypt : 使用 DES CBC 算法模式解密数据。
- DesCtrCrypt : 使用 DES CTR 算法模式加密/解密数据。
- DesCfbEncrypt : 使用 DES CFB 算法模式加密数据。
- DesCfbDecrypt : 使用 DES CFB 算法模式解密数据。
- DesOfbEncrypt : 使用 DES OFB 算法模式加密数据。
- DesOfbDecrypt : 使用 DES OFB 算法模式解密数据。
- HmacMd5 : 返回字符串 md5 hmac 值。
- HmacMd5WithBase64 : 获取字符串 md5 hmac base64 字符串值。
- HmacSha1 : 返回字符串 sha1 hmac 值。
- HmacSha1WithBase64 : 获取字符串的 sha1 base64 值。
- HmacSha256 : 返回字符串 sha256 hmac 值。
- HmacSha256WithBase64 : 获取字符串 sha256 hmac base64 值。
- HmacSha512 : 返回字符串 sha256 hmac 值。
- HmacSha512WithBase64 : 获取字符串 sha512 hmac base64 值。
- Md5Byte : 返回 byte slice 的 md5 值。
- Md5ByteWithBase64 : 获取 byte slice 的 md5 base64 值。
- Md5String : 返回字符串 md5 值。
- Md5StringWithBase64 : 获取字符串 md5 base64 值。
- Md5File : 返回文件 md5 值。
- Sha1 : 返回字符串 sha1 哈希值。
- Sha1WithBase64 : 获取字符串 sha1 base64 值。
- Sha256 :返回字符串 sha256 哈希值。
- Sha256WithBase64 : 获取字符串 sha256 base64 值。
- Sha512 : 返回字符串 sha512 哈希值。
- Sha512WithBase64 : 获取字符串 sha512 base64 值。
- GenerateRsaKey : 在当前目录下创建 rsa 私钥文件和公钥文件。
- RsaEncrypt : 用公钥文件 ras 加密数据。
- RsaDecrypt : 用私钥文件 rsa 解密数据。
函数库列表:datetime 日期时间处理包,格式化日期,比较日期
- AddDay : 将日期加/减天数。
- AddHour : 将日期加/减小时数。
- AddMinute : 将日期加/减分钟数。
- AddYear : 将日期加/减分年数。
- BeginOfMinute : 返回指定时间的分钟开始时间。
- BeginOfHour : 返回指定时间的小时开始时间。
- BeginOfDay : 返回指定时间的当天开始时间。
- BeginOfWeek : 返回指定时间的每周开始时间,默认开始时间星期日。
- BeginOfMonth : 返回指定时间的当月开始时间。
- BeginOfYear : 返回指定时间的当年开始时间。
- EndOfMinute : 返回指定时间的分钟结束时间。
- EndOfHour : 返回指定时间的小时结束时间。
- EndOfDay : 返回指定时间的当天结束时间。
- EndOfWeek : 返回指定时间的星期结束时间,默认结束时间星期六。
- EndOfMonth : 返回指定时间的月份结束时间。
- EndOfYear : 返回指定时间的年份结束时间。
- GetNowDate : 获取当天日期,返回格式:yyyy-mm-dd。
- GetNowTime : 获取当时时间,返回格式:hh:mm:ss。
- GetNowDateTime : 获取当时日期和时间,返回格式:yyyy-mm-dd hh:mm:ss。
- GetTodayStartTime : 返回当天开始时间, 格式: yyyy-mm-dd 00:00:00。
- GetTodayEndTime : 返回当天结束时间,格式: yyyy-mm-dd 23:59:59。
- GetZeroHourTimestamp : 获取零时时间戳(timestamp of 00:00)。
- GetNightTimestamp : 获取午夜时间戳(timestamp of 23:59)。
- FormatTimeToStr : 将日期格式化成字符串。
- FormatStrToTime : 将字符串格式化成时间。
- NewUnix : 创建一个 unix 时间戳。
- NewUnixNow : 创建一个当前时间的 unix 时间戳。
- NewFormat : 创建一个 yyyy-mm-dd hh:mm:ss 格式时间字符串的 unix 时间戳。
- NewISO8601 : 创建一个 iso8601 格式时间字符串的 unix 时间戳。
- ToUnix : 返回 unix 时间戳。
- ToFormat : 返回格式'yyyy-mm-dd hh:mm:ss'的日期字符串。
- ToFormatForTpl : 返回 tpl 格式指定的日期字符串。
- ToIso8601 : 返回 iso8601 日期字符串。
- IsLeapYear :验证是否是闰年。
- IsLeapYear : check if param year is leap year or not.
- BetweenSeconds : 返回两个时间的间隔秒数。
- DayOfYear : 返回参数日期是一年中的第几天。
- IsWeekend : 判断日期是否是周末。
- NowDateOrTime : 根据指定的格式和时区返回当前时间字符串。
- Timestamp : 返回当前秒级时间戳。
- TimestampMilli : 返回当前毫秒级时间戳。
- TimestampMicro : 返回当前微秒级时间戳。
- TimestampNano : 返回当前纳秒级时间戳。
函数库列表:fileutil 包含文件基本操作
- ClearFile : 清空文件内容。
- CreateFile : 创建文件,创建成功返回 true, 否则返回 false。
- CreateDir : 创建嵌套目录,例如/a/, /a/b/。
- CopyFile :拷贝文件,会覆盖原有的文件。
- FileMode : 获取文件 mode 信息。
- MiMeType : 获取文件 mime 类型, 参数的类型必须是 string 或者*os.File。
- IsExist : 判断文件或目录是否存在。
- IsLink : 判断文件是否是符号链接。
- IsDir : 判断参数是否是目录。
- ListFileNames : 返回目录下所有文件名。
- RemoveFile : 删除文件。
- ReadFileToString : 读取文件内容并返回字符串。
- ReadFileByLine : 按行读取文件内容,返回字符串切片包含每一行。
- Zip : zip 压缩文件, 参数可以是文件或目录。
- ZipAppendEntry : 通过将单个文件或目录追加到现有的 zip 文件。
- UnZip : zip 解压缩文件并保存在目录中。
- CurrentPath : 返回当前位置的绝对路径。
- IsZipFile : 判断文件是否是 zip 压缩文件。
- FileSize : 返回文件字节大小。
- MTime : 返回文件修改时间(unix timestamp)。
- Sha : 返回文件 sha 值。
- ReadCsvFile : 读取 csv 文件内容到切片。
- WriteCsvFile : 向 csv 文件写入内容。
- WriteBytesToFile : 将 bytes 写入文件。
- WriteStringToFile : 将字符串写入文件。
还有好多其他函数库列表,可以直接查看github地址:https://github.com/duke-git/lancet
示例
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/strutil"
)
func main() {
s := "hello"
rs := strutil.Reverse(s)
fmt.Println(rs) //olleh
}