1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00
Files
lancet/README_zh-CN.md
2023-01-06 14:14:00 +08:00

60 KiB
Raw Blame History


Go version Release GoDoc Go Report Card test codecov License

lancet柳叶刀是一个全面、高效、可复用的go语言工具函数库。 lancet受到了java apache common包和lodash.js的启发。

简体中文 | English

特性

  • 👏 全面、高效、可复用
  • 💪 300+常用 go 工具函数,支持 string、slice、datetime、net、crypt...
  • 💅 只依赖 go 标准库
  • 🌍 所有导出函数单元测试覆盖率 100%

安装

Note:

  1. 使用 go1.18 及以上版本的用户,建议安装 v2.x.x。 因为 v2.x.x 应用 go1.18 的泛型重写了大部分函数。
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
  1. 使用 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 相同返回 falsea 和 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 加密包支持数据加密和解密,获取 md5hash 值。支持 base64, md5, hmac, aes, des, rsa。

import "github.com/duke-git/lancet/v2/cryptor"

函数列表:

6. datetime 日期时间处理包,格式化日期,比较日期。

import "github.com/duke-git/lancet/v2/datetime"

函数列表:

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"

函数列表:

  • Comma : 用逗号每隔 3 位分割数字/字符串,支持前缀添加符号。 [doc] [play]

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"

函数列表:

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 : 当前切片中不包含值时,将该值追加到切片中。 [doc] [play]
  • Contain : 判断slice是否包含value。 [doc] [play]
  • ContainSubSlice : 判断slice是否包含subslice。 [doc] [play]
  • Chunk : 按照size参数均分slice。 [doc] [play]
  • Compact : 去除slice中的假值false values are false, nil, 0, "")。 [doc] [play]
  • Concat : 合并多个slices到一个slice中。 [doc] [play]
  • Count : 返回切片中指定元素的个数。 [doc] [play]
  • CountBy : 遍历切片对每个元素执行函数predicate. 返回符合函数返回值为true的元素的个数。 [doc] [play]
  • Difference : 创建一个切片,其元素不包含在另一个给定切片中。 [doc] [play]
  • DifferenceBy : 将两个slice中的每个元素调用iteratee函数并比较它们的返回值如果不相等返回在slice中对应的值。 [doc] [play]
  • DifferenceWith : 接受比较器函数,该比较器被调用以将切片的元素与值进行比较。 结果值的顺序和引用由第一个切片确定。 [doc] [play]
  • DeleteAt : 删除切片中指定开始索引到结束索引的元素。 [doc] [play]
  • Drop : 创建一个切片当n > 0时从开头删除n个元素或者当n < 0时从结尾删除n个元素。 [doc] [play]
  • Equal : 检查两个切片是否相等,相等条件:切片长度相同,元素顺序和值都相同。 [doc] [play]
  • EqualWith : 检查两个切片是否相等相等条件对两个切片的元素调用比较函数comparator返回true。 [doc] [play]
  • Every : 如果切片中的所有值都通过谓词函数则返回true。 [doc] [play]
  • Filter : 返回切片中通过predicate函数真值测试的所有元素。 [doc] [play]
  • Find : 遍历切片的元素返回第一个通过predicate函数真值测试的元素。 [doc] [play]
  • FindLast : 从头到尾遍历slice的元素返回最后一个通过predicate函数真值测试的元素。 [doc] [play]
  • Flatten : 将多维切片展平一层。 [doc] [play]
  • FlattenDeep : 将多维切片递归展平到一层。 [doc] [play]
  • ForEach : 遍历切片的元素并为每个元素调用iteratee函数。 [doc] [play]
  • GroupBy : 迭代切片的元素,每个元素将按条件分组,返回两个切片。 [doc] [play]
  • GroupWith : 创建一个mapkey是iteratee遍历slice中的每个元素返回的结果。值是切片元素。 [doc] [play]
  • IntSlicedeprecated : 将接口切片转换为int切片。 [doc] [play]
  • InterfaceSlicedeprecated : 将值转换为interface切片。 [doc] [play]
  • Intersection : 返回多个切片的交集。 [doc] [play]
  • InsertAt : 将元素插入到索引处的切片中。 [doc] [play]
  • IndexOf : 返回在切片中找到值的第一个匹配项的索引,如果找不到值,则返回-1。 [doc] [play]
  • LastIndexOf : 返回在切片中找到最后一个值的索引,如果找不到该值,则返回-1。 [doc] [play]
  • Map : 对slice中的每个元素执行map函数以创建一个新切片。 [doc] [play]
  • Merge : 合并多个切片(不会消除重复元素)。 [doc] [play]
  • Reverse : 反转切片中的元素顺序。 [doc] [play]
  • Reduce : 将切片中的元素依次运行iteratee函数返回运行结果。 [doc] [play]
  • Replace : 返回切片的副本其中前n个不重叠的old替换为new。 [doc] [play]
  • ReplaceAll : 返回切片的副本将其中old全部替换为new。 [doc] [play]
  • Repeat : 创建一个切片包含n个传入的item。 [doc] [play]
  • Shuffle : 随机打乱切片中的元素顺序。 [doc] [play]
  • Sort : 对任何有序类型(数字或字符串)的切片进行排序,使用快速排序算法。 [doc] [play]
  • SortBy : 按照less函数确定的升序规则对切片进行排序。排序不保证稳定性。 [doc] [play]
  • SortByFielddeprecated : 按字段对结构切片进行排序。slice元素应为struct字段类型应为int、uint、string或bool。 [doc] [play]
  • Some : 如果列表中的任何值通过谓词函数则返回true。 [doc] [play]
  • StringSlicedeprecated : 将接口切片转换为字符串切片。 [doc] [play]
  • SymmetricDifference : 返回一个切片,其中的元素存在于参数切片中,但不同时存储在于参数切片中(交集取反)。 [doc] [play]
  • ToSlice : 将可变参数转为切片。 [doc] [play]
  • ToSlicePointer : 将可变参数转为指针切片。 [doc] [play]
  • Unique : 删除切片中的重复元素。 [doc] [play]
  • UniqueBy : 对切片的每个元素调用iteratee函数然后删除重复元素。 [doc] [play]
  • Union : 合并多个切片。 [doc] [play]
  • UnionBy : 对切片的每个元素调用函数后,合并多个切片。 [doc] [play]
  • UpdateAt : 更新索引处的切片元素。 [doc] [play]
  • Without : 创建一个不包括所有给定值的切片。 [doc] [play]
  • KeyBy :将切片每个元素调用函数后转为map。 [doc] [play]

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 : 验证字符串是否包含中文字符。 [doc] [play]
  • ContainLetter : 验证字符串是否包含至少一个英文字母。 [doc] [play]
  • ContainLower : 验证字符串是否包含至少一个英文小写字母。 [doc] [play]
  • ContainUpper : 验证字符串是否包含至少一个英文大写字母。 [doc] [play]
  • IsAlpha : 验证字符串是否只包含英文字母。 [doc] [play]
  • IsAllUpper : 验证字符串是否全是大写英文字母。 [doc] [play]
  • IsAllLower : 验证字符串是否全是小写英文字母。 [doc] [play]
  • IsBase64 : 验证字符串是否是base64编码。 [doc] [play]
  • IsChineseMobile : 验证字符串是否是中国手机号码。 [doc] [play]
  • IsChineseIdNum : 验证字符串是否是中国身份证号码。 [doc] [play]
  • IsChinesePhone : 验证字符串是否是中国电话座机号码(xxx-xxxxxxxx or xxxx-xxxxxxx.)。 [doc] [play]
  • IsCreditCard : 验证字符串是否是信用卡号码。 [doc] [play]
  • IsDns : 验证字符串是否是有效dns。 [doc] [play]
  • IsEmail : 验证字符串是否是有效电子邮件地址。 [doc] [play]
  • IsEmptyString : 验证字符串是否是空字符串。 [doc] [play]
  • IsFloatStr : 验证字符串是否是可以转换为浮点数。 [doc] [play]
  • IsNumberStr : 验证字符串是否是可以转换为数字。 [doc] [play]
  • IsJSON : 验证字符串是否是有效json。 [doc] [play]
  • IsRegexMatch : 验证字符串是否可以匹配正则表达式。 [doc] [play]
  • IsIntStr : 验证字符串是否是可以转换为整数。 [doc] [play]
  • IsIp : 验证字符串是否是ip地址。 [doc] [play]
  • IsIpV4 : 验证字符串是否是ipv4地址。 [doc] [play]
  • IsIpV6 : 验证字符串是否是ipv6地址。 [doc] [play]
  • IsStrongPassword : 验证字符串是否是强密码:(字母+数字+特殊字符)。 [doc] [play]
  • IsUrl : 验证字符串是否是url。 [doc] [play]
  • IsWeakPassword : 验证字符串是否是弱密码(只包含字母+数字)。 [doc] [play]
  • IsZeroValue : 判断传入的参数值是否为零值。 [doc] [play]
  • IsGBK : 检查数据编码是否为gbk汉字内部代码扩展规范。 [doc] [play]

20. xerror 包实现一些错误处理函数

import "github.com/duke-git/lancet/v2/xerror"

函数列表:

如何贡献代码

非常感激任何的代码提交以使 lancet 的功能越来越强大。创建 pull request 时请遵守以下规则。

  1. Fork lancet 仓库。
  2. 创建自己的特性分支。
  3. 提交变更。
  4. Push 分支。
  5. 创建新的 pull request。