![Go version](https://img.shields.io/badge/go-%3E%3Dv1.18-9cf) [![Release](https://img.shields.io/badge/release-2.1.12-green.svg)](https://github.com/duke-git/lancet/releases) [![GoDoc](https://godoc.org/github.com/duke-git/lancet/v2?status.svg)](https://pkg.go.dev/github.com/duke-git/lancet/v2) [![Go Report Card](https://goreportcard.com/badge/github.com/duke-git/lancet/v2)](https://goreportcard.com/report/github.com/duke-git/lancet/v2) [![test](https://github.com/duke-git/lancet/actions/workflows/codecov.yml/badge.svg?branch=main&event=push)](https://github.com/duke-git/lancet/actions/workflows/codecov.yml) [![codecov](https://codecov.io/gh/duke-git/lancet/branch/main/graph/badge.svg?token=FC48T1F078)](https://codecov.io/gh/duke-git/lancet) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/duke-git/lancet/blob/main/LICENSE)

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

简体中文 | [English](./README.md) ## 特性 - 👏 全面、高效、可复用 - 💪 300+常用 go 工具函数,支持 string、slice、datetime、net、crypt... - 💅 只依赖 go 标准库 - 🌍 所有导出函数单元测试覆盖率 100% ## 安装 ### Note: 1. 使用 go1.18 及以上版本的用户,建议安装 v2.x.x。 因为 v2.x.x 应用 go1.18 的泛型重写了大部分函数。 ```go go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x ``` 2. 使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.3.5。 ```go go get github.com/duke-git/lancet@v1.3.5 // 使用go1.18以下版本, 必须安装v1.x.x版本 ``` ## 用法 lancet 是以包的结构组织代码的,使用时需要导入相应的包名。例如:如果使用字符串相关函数,需要导入 strutil 包: ```go import "github.com/duke-git/lancet/v2/strutil" ``` ## 例子 此处以字符串工具函数 Reverse(逆序字符串)为例,需要导入 strutil 包: ```go 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 包实现一些基本查找和排序算法。 ```go import "github.com/duke-git/lancet/v2/algorithm" ``` #### Function list: - **BubbleSort** : 使用冒泡排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#BubbleSort)] [[play](https://go.dev/play/p/GNdv7Jg2Taj)] - **CountSort** : 使用计数排序算法对切片进行排序。不改变原数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#CountSort)] [[play](https://go.dev/play/p/tB-Umgm0DrP)] - **HeapSort** : 使用堆排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#HeapSort)] [[play](https://go.dev/play/p/u6Iwa1VZS_f)] - **InsertionSort** : 使用插入排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#InsertionSort)] [[play](https://go.dev/play/p/G5LJiWgJJW6)] - **MergeSort** : 使用合并排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#MergeSort)] [[play](https://go.dev/play/p/ydinn9YzUJn)] - **QuickSort** : 使用快速排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#QuickSort)] [[play](https://go.dev/play/p/7Y7c1Elk3ax)] - **SelectionSort** : 使用选择排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#SelectionSort)] [[play](https://go.dev/play/p/oXovbkekayS)] - **ShellSort** : 使用希尔排序算法对切片进行排序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#ShellSort)] [[play](https://go.dev/play/p/3ibkszpJEu3)] - **BinarySearch** : 返回排序切片中目标值的索引,使用二分搜索(递归调用)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#BinarySearch)] [[play](https://go.dev/play/p/t6MeGiUSN47)] - **BinaryIterativeSearch** :返回排序切片中目标值的索引,使用二分搜索(非递归)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#BinaryIterativeSearch)] [[play](https://go.dev/play/p/Anozfr8ZLH3)] - **LinearSearch** : 基于传入的相等函数返回切片中目标值的索引。(线性查找) [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#LinearSearch)] - **LRUCache** : 应用 lru 算法实现内存缓存. [[doc](https://github.com/duke-git/lancet/blob/main/docs/algorithm_zh-CN.md#LRUCache)] [[play](https://go.dev/play/p/-EZjgOURufP)] ### 2. concurrency 包含一些支持并发编程的功能。例如:goroutine, channel, async 等。 ```go import "github.com/duke-git/lancet/v2/concurrency" ``` #### Function list: - **NewChannel** : 返回一个 Channel 指针实例。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#NewChannel)] - **Bridge** : 将多个 channel 链接到一个 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/Bridge.md#NewChannel)] - **FanIn** : 将多个 channel 合并为一个 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#FanIn)] - **Generate** : 根据传入的值,生成 channel。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#Generate)] - **Or** : 将一个或多个 channel 读取到一个 channel 中,当任何读取 channel 关闭时将结束读取。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#Or)] - **OrDone** : 将一个 channel 读入另一个 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#OrDone)] - **Repeat** : 返回一个 channel,将参数`values`重复放入 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#Repeat)] - **RepeatFn** : 返回一个 channel,重复执行函数 fn,并将结果放入返回的 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#RepeatFn)] - **Take** : 返回一个 channel,其值从另一个 channel 获取,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#Take)] - **Tee** : 将一个 channel 分成两个 channel,直到取消上下文。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/concurrency_zh-CN.md#Tee)] ### 3. condition 包含一些用于条件判断的函数。 ```go import "github.com/duke-git/lancet/v2/condition" ``` #### Function list: - **Bool** : 返回传入参数的 bool 值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Bool)] [[play](https://go.dev/play/p/ETzeDJRSvhm)] - **And** : 逻辑且操作,当切仅当 a 和 b 都为 true 时返回 true。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#And)] [[play](https://go.dev/play/p/W1SSUmt6pvr)] - **Or** : 逻辑或操作,当切仅当 a 和 b 都为 false 时返回 false。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Or)] [[play](https://go.dev/play/p/UlQTxHaeEkq)] - **Xor** : 逻辑异或操作,a 和 b 相同返回 false,a 和 b 不相同返回 true [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Xor)] [[play](https://go.dev/play/p/gObZrW7ZbG8)] - **Nor** : 异或的取反操作。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Nor)] [[play](https://go.dev/play/p/g2j08F_zZky) - **Xnor** : 如果 a 和 b 都是真的或 a 和 b 均是假的,则返回 true。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Xnor)] [[play](https://go.dev/play/p/OuDB9g51643)]] - **Nand** : 如果 a 和 b 都为真,返回 false,否则返回 true [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Nand)] [[play](https://go.dev/play/p/vSRMLxLIbq8)] - **TernaryOperator** : 三元运算符。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#TernaryOperator)] [[play](https://go.dev/play/p/ElllPZY0guT)] ### 4. convertor 转换器包支持一些常见的数据类型转换。 ```go import "github.com/duke-git/lancet/v2/convertor" ``` #### 函数列表: - **ColorHexToRGB** : 颜色值十六进制转 rgb。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ColorHexToRGB)] [[play](https://go.dev/play/p/o7_ft-JCJBV)] - **ColorRGBToHex** : 颜色值 rgb 转十六进制。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ColorRGBToHex)] [[play](https://go.dev/play/p/nzKS2Ro87J1)] - **ToBool** : 字符串转布尔类型,使用 strconv.ParseBool。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToBool)] [[play](https://go.dev/play/p/ARht2WnGdIN)] - **ToBytes** : interface 转字节切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToBytes)] [[play](https://go.dev/play/p/fAMXYFDvOvr)] - **ToChar** : 字符串转字符切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToChar)] [[play](https://go.dev/play/p/JJ1SvbFkVdM)] - **ToChannel** : 将切片转为只读 channel。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToChannel)] [[play](https://go.dev/play/p/hOx_oYZbAnL)] - **ToFloat** : 将 interface 转成 float64 类型,如果参数无法转换,会返回 0.0 和 error。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToFloat)] [[play](https://go.dev/play/p/4YTmPCibqHJ)] - **ToInt** : 将 interface 转成 int64 类型,如果参数无法转换,会返回 0 和 error。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToInt)] [[play](https://go.dev/play/p/9_h9vIt-QZ_b)] - **ToJson** : 将 interface 转成 json 字符串,如果参数无法转换,会返回""和 error。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToJson)] [[play](https://go.dev/play/p/2rLIkMmXWvR)] - **ToMap** : 将切片转为 map。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToMap)] [[play](https://go.dev/play/p/tVFy7E-t24l)] - **ToPointer** : 返回传入值的指针。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToPointer)] [[play](https://go.dev/play/p/ASf_etHNlw1)] - **ToString** : 将值转换为字符串,对于数字、字符串、[]byte,将转换为字符串。 对于其他类型(切片、映射、数组、结构)将调用 json.Marshal。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#ToString)] [[play](https://go.dev/play/p/nF1zOOslpQq)] - **StructToMap** : 将 struct 转成 map,只会转换 struct 中可导出的字段。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#StructToMap)] [[play](https://go.dev/play/p/KYGYJqNUBOI)] - **MapToSlice** : map 中 key 和 value 执行函数 iteratee 后,转为切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#MapToSlice)] [[play](https://go.dev/play/p/dmX4Ix5V6Wl)] - **EncodeByte** : 将传入的 data 编码成字节切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#EncodeByte)] [[play](https://go.dev/play/p/DVmM1G5JfuP)] - **DecodeByte** : 解码字节切片到目标对象,目标对象需要传入一个指针实例。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#DecodeByte)] [[play](https://go.dev/play/p/zI6xsmuQRbn)] ### 5. cryptor 加密包支持数据加密和解密,获取 md5,hash 值。支持 base64, md5, hmac, aes, des, rsa。 ```go import "github.com/duke-git/lancet/v2/cryptor" ``` #### 函数列表: - **AesEcbEncrypt** : 使用AES ECB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesEcbEncrypt)] [[play](https://go.dev/play/p/zI6xsmuQRbn)] - **AesEcbDecrypt** : 使用AES ECB算法模解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesEcbDecrypt)] [[play](https://go.dev/play/p/zI6xsmuQRbn)] - **AesCbcEncrypt** : 使用AES CBC算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCbcEncrypt)] [[play](https://go.dev/play/p/IOq_g8_lKZD)] - **AesCbcDecrypt** : 使用AES CBC算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCbcDecrypt)] [[play](https://go.dev/play/p/IOq_g8_lKZD)] - **AesCtrCrypt** : 使用AES CTR算法模式加密/解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCtrCrypt)] [[play](https://go.dev/play/p/SpaZO0-5Nsp)] - **AesCfbEncrypt** : 使用AES CFB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCfbEncrypt)] [[play](https://go.dev/play/p/tfkF10B13kH)] - **AesCfbDecrypt** : 使用AES CFB算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCfbDecrypt)] [[play](https://go.dev/play/p/tfkF10B13kH)] - **AesOfbEncrypt** : 使用AES OFB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesOfbEncrypt)] [[play](https://go.dev/play/p/VtHxtkUj-3F)] - **AesOfbDecrypt** : 使用AES OFB算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesOfbDecrypt)] [[play](https://go.dev/play/p/VtHxtkUj-3F)] - **Base64StdEncode** : 将字符串base64编码。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Base64StdEncode)] [[play](https://go.dev/play/p/VOaUyQUreoK)] - **Base64StdDecode** : 解码base64字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Base64StdDecode)] [[play](https://go.dev/play/p/RWQylnJVgIe)] - **DesEcbEncrypt** : 使用DES ECB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesEcbEncrypt)] [[play](https://go.dev/play/p/8qivmPeZy4P)] - **DesEcbDecrypt** : 使用DES ECB算法模解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesEcbDecrypt)] [[play](https://go.dev/play/p/8qivmPeZy4P)] - **DesCbcEncrypt** : 使用DES CBC算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCbcEncrypt)] [[play](https://go.dev/play/p/4cC4QvWfe3_1)] - **DesCbcDecrypt** : 使用DES CBC算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCbcDecrypt)] [[play](https://go.dev/play/p/4cC4QvWfe3_1)] - **DesCtrCrypt** : 使用DES CTR算法模式加密/解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCtrCrypt)] [[play](https://go.dev/play/p/9-T6OjKpcdw)] - **DesCfbEncrypt** : 使用DES CFB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCfbEncrypt)] [[play](https://go.dev/play/p/y-eNxcFBlxL)] - **DesCfbDecrypt** : 使用DES CFB算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCfbDecrypt)] [[play](https://go.dev/play/p/y-eNxcFBlxL)] - **DesOfbEncrypt** : 使用DES OFB算法模式加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesOfbEncrypt)] [[play](https://go.dev/play/p/74KmNadjN1J)] - **DesOfbDecrypt** : 使用DES OFB算法模式解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesOfbDecrypt)] [[play](https://go.dev/play/p/74KmNadjN1J)] - **HmacMd5** : 返回字符串md5 hmac值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacMd5)] [[play](https://go.dev/play/p/uef0q1fz53I)] - **HmacSha1** : 返回字符串sha1 hmac值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha1)] [[play](https://go.dev/play/p/1UI4oQ4WXKM)] - **HmacSha256** : 返回字符串sha256 hmac值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha256)] [[play](https://go.dev/play/p/HhpwXxFhhC0)] - **HmacSha512** : 返回字符串sha256 hmac值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha512)] [[play](https://go.dev/play/p/59Od6m4A0Ud)] - **Md5String** : 返回字符串md5值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Md5String)] [[play](https://go.dev/play/p/1bLcVetbTOI)] - **Md5File** : 返回文件md5值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Md5File)] - **Sha1** : 返回字符串sha1哈希值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha1)] [[play](https://go.dev/play/p/_m_uoD1deMT)] - **Sha256** :返回字符串sha256哈希值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha256)] [[play](https://go.dev/play/p/tU9tfBMIAr1)] - **Sha512** : 返回字符串sha512哈希值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha512)] [[play](https://go.dev/play/p/3WsvLYZxsHa)] - **GenerateRsaKey** : 在当前目录下创建rsa私钥文件和公钥文件。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#GenerateRsaKey)] [[play](https://go.dev/play/p/zutRHrDqs0X)] - **RsaEncrypt** : 用公钥文件ras加密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#RsaEncrypt)] [[play](https://go.dev/play/p/uef0q1fz53I)] - **RsaDecrypt** : 用私钥文件rsa解密数据。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#RsaDecrypt)] [[play](https://go.dev/play/p/uef0q1fz53I)] ### 6. datetime 日期时间处理包,格式化日期,比较日期。 ```go import "github.com/duke-git/lancet/v2/datetime" ``` #### 函数列表: - **AddDay** : 将日期加/减天数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#AddDay)] [[play](https://go.dev/play/p/dIGbs_uTdFa)] - **AddHour** : 将日期加/减小时数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#AddHour)] [[play](https://go.dev/play/p/rcMjd7OCsi5)] - **AddMinute** : 将日期加/减分钟数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#AddMinute)] [[play](https://go.dev/play/p/nT1heB1KUUK)] - **BeginOfMinute** : 返回指定时间的分钟开始时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfMinute)] [[play](https://go.dev/play/p/ieOLVJ9CiFT)] - **BeginOfHour** : 返回指定时间的小时开始时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfHour)] [[play](https://go.dev/play/p/GhdGFnDWpYs)] - **BeginOfDay** : 返回指定时间的当天开始时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfDay)] [[play](https://go.dev/play/p/94m_UT6cWs9)] - **BeginOfWeek** : 返回指定时间的每周开始时间,默认开始时间星期日。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfWeek)] [[play](https://go.dev/play/p/ynjoJPz7VNV)] - **BeginOfMonth** : 返回指定时间的当月开始时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfMonth)] [[play](https://go.dev/play/p/bWXVFsmmzwL)] - **BeginOfYear** : 返回指定时间的当年开始时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#BeginOfYear)] [[play](https://go.dev/play/p/i326DSwLnV8)] - **EndOfMinute** : 返回指定时间的分钟结束时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfMinute)] [[play](https://go.dev/play/p/yrL5wGzPj4z)] - **EndOfHour** : 返回指定时间的小时结束时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfHour)] [[play](https://go.dev/play/p/6ce3j_6cVqN)] - **EndOfDay** : 返回指定时间的当天结束时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfDay)] [[play](https://go.dev/play/p/eMBOvmq5Ih1)] - **EndOfWeek** : 返回指定时间的星期结束时间,默认结束时间星期六。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfWeek)] [[play](https://go.dev/play/p/i08qKXD9flf)] - **EndOfMonth** : 返回指定时间的月份结束时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfMonth)] [[play](https://go.dev/play/p/_GWh10B3Nqi)] - **EndOfYear** : 返回指定时间的年份结束时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#EndOfYear)] [[play](https://go.dev/play/p/G01cKlMCvNm)] - **GetNowDate** : 获取当天日期,返回格式:yyyy-mm-dd。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#GetNowDate)] [[play](https://go.dev/play/p/PvfkPpcpBBf)] - **GetNowTime** : 获取当时时间,返回格式:hh:mm:ss。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#GetNowTime)] [[play](https://go.dev/play/p/l7BNxCkTmJS)] - **GetNowDateTime** : 获取当时日期和时间,返回格式:yyyy-mm-dd hh:mm:ss。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#GetNowDateTime)] [[play](https://go.dev/play/p/pI4AqngD0al)] - **GetZeroHourTimestamp** : 获取零时时间戳(timestamp of 00:00)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#GetZeroHourTimestamp)] [[play](https://go.dev/play/p/QmL2oIaGE3q)] - **GetNightTimestamp** : 获取午夜时间戳(timestamp of 23:59)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#GetNightTimestamp)] [[play](https://go.dev/play/p/UolysR3MYP1)] - **FormatTimeToStr** : 将日期格式化成字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#FormatTimeToStr)] [[play](https://go.dev/play/p/_Ia7M8H_OvE)] - **FormatStrToTime** : 将字符串格式化成时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#FormatStrToTime)] [[play](https://go.dev/play/p/1h9FwdU8ql4)] - **NewUnix** : 创建一个unix时间戳。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewUnix)] [[play](https://go.dev/play/p/psoSuh_kLRt)] - **NewUnixNow** : 创建一个当前时间的unix时间戳。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewUnixNow)] [[play](https://go.dev/play/p/U4PPx-9D0oz)] - **NewFormat** : 创建一个yyyy-mm-dd hh:mm:ss格式时间字符串的unix时间戳。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewFormat)] [[play](https://go.dev/play/p/VkW08ZOaXPZ)] - **NewISO8601** : 创建一个iso8601格式时间字符串的unix时间戳。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewISO8601)] [[play](https://go.dev/play/p/mkhOHQkdeA2)] - **ToUnix** : 返回unix时间戳。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToUnix)] [[play](https://go.dev/play/p/_LUiwAdocjy)] - **ToFormat** : 返回格式'yyyy-mm-dd hh:mm:ss'的日期字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToFormat)] [[play](https://go.dev/play/p/VkW08ZOaXPZ)] - **ToFormatForTpl** : 返回tpl格式指定的日期字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToFormatForTpl)] [[play](https://go.dev/play/p/nyXxXcQJ8L5)] - **ToIso8601** : 返回iso8601日期字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToIso8601)] [[play](https://go.dev/play/p/mkhOHQkdeA2)] ### 7. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph. ```go 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: - **List** : 线性表结构, 用切片实现。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/list_zh-CN.md)] - **Link** : 链表解构, 包括单链表和双向链表。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/link_zh-CN.md)] - **Stack** : 栈结构(fifo), 包括数组栈和链表栈。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/stack_zh-CN.md)] - **Queue** : 队列结构(filo), 包括数组队列,链表队列,循环队列,优先级队列。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/queue_zh-CN.md)] - **Set** : 集合(set)结构。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set_zh-CN.md)] - **Tree** : 二叉搜索树。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree_zh-CN.md)] - **Heap** : 二叉max堆。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap_zh-CN.md)] - **Hashmap** : 哈希映射。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap_zh-CN.md)] ### 8. fileutil 包含文件基本操作。 ```go import "github.com/duke-git/lancet/v2/fileutil" ``` #### 函数列表: - **ClearFile** : 清空文件内容。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#ClearFile)] [[play](https://go.dev/play/p/NRZ0ZT-G94H)] - **CreateFile** : 创建文件,创建成功返回 true, 否则返回 false。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#CreateFile)] [[play](https://go.dev/play/p/lDt8PEsTNKI)] - **CreateDir** : 创建嵌套目录,例如/a/, /a/b/。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#CreateDir)] [[play](https://go.dev/play/p/qUuCe1OGQnM)] - **CopyFile** :拷贝文件,会覆盖原有的文件。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#CopyFile)] [[play](https://go.dev/play/p/Jg9AMJMLrJi)] - **FileMode** : 获取文件 mode 信息。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#FileMode)] [[play](https://go.dev/play/p/2l2hI42fA3p)] - **MiMeType** : 获取文件 mime 类型, 参数的类型必须是 string 或者\*os.File。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#MiMeType)] [[play](https://go.dev/play/p/bd5sevSUZNu)] - **IsExist** : 判断文件或目录是否存在。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#IsExist)] [[play](https://go.dev/play/p/nKKXt8ZQbmh)] - **IsLink** : 判断文件是否是符号链接。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#IsLink)] [[play](https://go.dev/play/p/TL-b-Kzvf44)] - **IsDir** : 判断参数是否是目录。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#IsDir)] [[play](https://go.dev/play/p/WkVwEKqtOWk)] - **ListFileNames** : 返回目录下所有文件名。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#ListFileNames)] [[play](https://go.dev/play/p/Tjd7Y07rejl)] - **RemoveFile** : 删除文件。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#RemoveFile)] [[play](https://go.dev/play/p/P2y0XW8a1SH)] - **ReadFileToString** : 读取文件内容并返回字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#ReadFileToString)] [[play](https://go.dev/play/p/cmfwp_5SQTp)] - **ReadFileByLine** : 按行读取文件内容,返回字符串切片包含每一行。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#ReadFileByLine)] [[play](https://go.dev/play/p/svJP_7ZrBrD)] - **Zip** : zip 压缩文件, 参数可以是文件或目录。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#Zip)] [[play](https://go.dev/play/p/j-3sWBp8ik_P)] - **UnZip** : zip 解压缩文件并保存在目录中。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/fileutil_zh-CN.md#UnZip)] [[play](https://go.dev/play/p/g0w34kS7B8m)] ### 9. formatter 格式化器包含一些数据格式化处理方法。 ```go import "github.com/duke-git/lancet/v2/formatter" ``` #### 函数列表: - **Comma** : 用逗号每隔 3 位分割数字/字符串,支持前缀添加符号。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/formatter_zh-CN.md#Comma)] [[play](https://go.dev/play/p/eRD5k2vzUVX)] ### 10. function 函数包控制函数执行流程,包含部分函数式编程。 ```go import "github.com/duke-git/lancet/v2/function" ``` #### 函数列表: - **After** : 创建一个函数,当该函数被调用n或更多次之后将执行传入的函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#After)] [[play](https://go.dev/play/p/eRD5k2vzUVX)] - **Before** : 创建一个函数,当该函数被调用不超过n次时,将执行执行传入的函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Before)] [[play](https://go.dev/play/p/0HqUDIFZ3IL)] - **CurryFn** : 创建柯里化函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#CurryFn)] - **Compose** : 从右至左组合函数列表fnList,返回组合后的函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Compose)] - **Delay** : 延迟delay时间后调用函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Delay)] [[play](https://go.dev/play/p/Ivtc2ZE-Tye)] - **Debounced** : 创建一个debounced函数,该函数延迟调用fn直到自上次调用debounced函数后等待持续时间过去。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Debounced)] [[play](https://go.dev/play/p/absuEGB_GN7)] - **Schedule** : 每次持续时间调用函数,直到关闭返回的channel。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Schedule)] [[play](https://go.dev/play/p/hbON-Xeyn5N)] - **Pipeline** : 从右至左执行函数列表。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Pipeline)] [[play](https://go.dev/play/p/mPdUVvj6HD6)] - **Watcher** : Watcher用于记录代码执行时间。可以启动/停止/重置手表定时器。获取函数执行的时间。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Watcher)] ### 11. maputil 包括一些操作 map 的函数. ```go import "github.com/duke-git/lancet/v2/maputil" ``` #### 函数列表: - **ForEach** : 对 map 中的每对 key 和 value 执行 iteratee 函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#ForEach)] [[play](https://go.dev/play/p/OaThj6iNVXK)] - **Filter** : 迭代 map 中的每对 key 和 value,返回 map,其中的 key 和 value 符合 predicate 函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Filter)] [[play](https://go.dev/play/p/fSvF3wxuNG7)] - **Intersect** : 多个 map 的交集操作。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Intersect)] [[play](https://go.dev/play/p/Zld0oj3sjcC)] - **Keys** : 返回 map 中所有 key 组成的切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Keys)] [[play](https://go.dev/play/p/xNB5bTb97Wd)] - **Merge** : 合并多个 map, 相同的 key 会被之后的 key 覆盖。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Merge)] [[play](https://go.dev/play/p/H95LENF1uB-)] - **Minus** : 返回一个 map,其中的 key 存在于 mapA,不存在于 mapB。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Minus)] [[play](https://go.dev/play/p/3u5U9K7YZ9m)] - **Values** : 返回 map 中所有 values 组成的切片 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Values)] [[play](https://go.dev/play/p/CBKdUc5FTW6)] - **IsDisjoint** : 验证两个 map 是否具有不同的 key。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#IsDisjoint)] [[play](https://go.dev/play/p/N9qgYg_Ho6f)] ### 12. mathutil 包实现了一些数学计算的函数。 ```go import "github.com/duke-git/lancet/v2/mathutil" ``` #### Function list: - **Average** :计算平均数,可能需要对结果调用 RoundToFloat 方法四舍五入。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Average)] [[play](https://go.dev/play/p/Vv7LBwER-pz)] - **Exponent** : 指数计算(x 的 n 次方)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Exponent)] [[play](https://go.dev/play/p/uF3HGNPk8wr)] - **Fibonacci** :计算斐波那契数列的第 n 个数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Fibonacci)] [[play](https://go.dev/play/p/IscseUNMuUc)] - **Factorial** : 计算阶乘。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Factorial)] [[play](https://go.dev/play/p/tt6LdOK67Nx)] - **Max** : 返回参数中的最大数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Max)] [[play](https://go.dev/play/p/cN8DHI0rTkH)] - **MaxBy** : 使用给定的比较器函数返回切片的最大值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#MaxBy)] [[play](https://go.dev/play/p/pbe2MT-7DV2)] - **Min** : 返回参数中的最小数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Min)] [[play](https://go.dev/play/p/21BER_mlGUj)] - **MinBy** : 使用给定的比较器函数返回切片的最小值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#MinBy)] [[play](https://go.dev/play/p/N9qgYg_Ho6f)] - **Percent** : 计算百分比,可以指定保留 n 位小数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#Percent)] - **RoundToFloat** : 四舍五入,保留 n 位小数,返回 float64。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#RoundToFloat)] [[play](https://go.dev/play/p/ghyb528JRJL)] - **RoundToString** : 四舍五入,保留 n 位小数,返回 string。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#RoundToString)] [[play](https://go.dev/play/p/kZwpBRAcllO)] - **TruncRound** : 截短 n 位小数(不进行四舍五入)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/mathutil_zh-CN.md#TruncRound)] [[play](https://go.dev/play/p/aumarSHIGzP)] ### 13. netutil 网络包支持获取 ip 地址,发送 http 请求。 ```go import "github.com/duke-git/lancet/v2/netutil" ``` #### 函数列表: - **ConvertMapToQueryString** : 将map转换成http查询字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#ConvertMapToQueryString)] [[play](https://go.dev/play/p/jnNt_qoSnRi)] - **EncodeUrl** : 编码url query string的值(?a=1&b=[2] -> ?a=1&b=%5B2%5D)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#EncodeUrl)] [[play](https://go.dev/play/p/bsZ6BRC4uKI)] - **GetInternalIp** : 获取内部ipv4。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetInternalIp)] [[play](https://go.dev/play/p/5mbu-gFp7ei)] - **GetIps** : 获取系统ipv4地址列表。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetIps)] [[play](https://go.dev/play/p/NUFfcEmukx1)] - **GetMacAddrs** : 获取系统mac地址列。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetMacAddrs)] [[play](https://go.dev/play/p/Rq9UUBS_Xp1)] - **GetPublicIpInfo** : 获取[公网ip信息](http://ip-api.com/json/). [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetPublicIpInfo)] [[play](https://go.dev/play/p/YDxIfozsRHR)] - **GetRequestPublicIp** : 获取http请求ip。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetRequestPublicIp)] [[play](https://go.dev/play/p/kxU-YDc_eBo)] - **IsPublicIP** : 判断ip是否是公共ip。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#IsPublicIP)] [[play](https://go.dev/play/p/nmktSQpJZnn)] - **IsInternalIP** : 判断ip是否是局域网ip。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#IsInternalIP)] [[play](https://go.dev/play/p/sYGhXbgO4Cb)] - **HttpRequest** : 用于抽象HTTP请求实体的结构。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpRequest)] [[play](https://go.dev/play/p/jUSgynekH7G)] - **HttpClient** : 用于发送HTTP请求。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpClient)] [[play](https://go.dev/play/p/jUSgynekH7G)] - **SendRequest** : 发送http请求。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#SendRequest)] [[play](https://go.dev/play/p/jUSgynekH7G)] - **DecodeResponse** : 解析http响应体到目标结构体。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#DecodeResponse)] [[play](https://go.dev/play/p/jUSgynekH7G)] - **StructToUrlValues** : 将结构体转为url values, 仅转化结构体导出字段并且包含`json` tag。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#StructToUrlValues)] [[play](https://go.dev/play/p/pFqMkM40w9z)] - **HttpGetdeprecated** : 发送http get请求(已弃用:SendRequest代替)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpGet)] - **HttpDeletedeprecated** : 发送http delete请求(已弃用:SendRequest代替)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpDelete)] - **HttpPostdeprecated** : 发送http post请求(已弃用:SendRequest代替)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPost)] - **HttpPutdeprecated** : 发送http put请求(已弃用:SendRequest代替)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPut)] - **HttpPatchdeprecated** : 发送http patch请求(已弃用:SendRequest代替)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPatch)] - **ParseHttpResponse** : 解析http响应体到目标结构体。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#ParseHttpResponse)] ### 14. random 随机数生成器包,可以生成随机[]bytes, int, string。 ```go import "github.com/duke-git/lancet/v2/random" ``` #### 函数列表: - **RandBytes** : 生成随机字节切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandBytes)] [[play](https://go.dev/play/p/EkiLESeXf8d)] - **RandInt** : 生成随机int, 范围[min, max)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandInt)] [[play](https://go.dev/play/p/pXyyAAI5YxD)] - **RandString** : 生成给定长度的随机字符串,只包含字母(a-zA-Z)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandString)] [[play](https://go.dev/play/p/W2xvRUXA7Mi)] - **RandUpper** : 生成给定长度的随机大写字母字符串(A-Z)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandUpper)] [[play](https://go.dev/play/p/29QfOh0DVuh)] - **RandLower** : 生成给定长度的随机小写字母字符串(a-z)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandLower)] [[play](https://go.dev/play/p/XJtZ471cmtI)] - **RandNumeral** : 生成给定长度的随机数字字符串(0-9)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandNumeral)] [[play](https://go.dev/play/p/g4JWVpHsJcf)] - **RandNumeralOrLetter** : 生成给定长度的随机字符串(数字+字母)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandNumeralOrLetter)] [[play](https://go.dev/play/p/19CEQvpx2jD)] - **UUIdV4** : 生成UUID v4字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#UUIdV4)] [[play](https://go.dev/play/p/_Z9SFmr28ft)] ### 15. retry 重试执行函数直到函数运行成功或被 context cancel。 ```go import "github.com/duke-git/lancet/v2/retry" ``` #### 函数列表: - **Context** : 设置重试context参数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Context)] [[play](https://go.dev/play/p/xnAOOXv9GkS)] - **Retry** : 重试执行函数retryFunc,直到函数运行成功,或被context取消。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Retry)] [[play](https://go.dev/play/p/nk2XRmagfVF)] - **RetryFunc** : 重试执行的函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryFunc)] [[play](https://go.dev/play/p/nk2XRmagfVF)] - **RetryDuration** : 设置重试间隔时间,默认3秒。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryDuration)] [[play](https://go.dev/play/p/nk2XRmagfVF)] - **RetryTimes** : 设置重试次数,默认5。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryTimes)] [[play](https://go.dev/play/p/ssfVeU2SwLO)] ### 16. slice 包含操作切片的方法集合。 ```go import "github.com/duke-git/lancet/v2/slice" ``` #### 函数列表: - **AppendIfAbsent** : 当前切片中不包含值时,将该值追加到切片中。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#AppendIfAbsent)] [[play](https://go.dev/play/p/GNdv7Jg2Taj)] - **Contain** : 判断slice是否包含value。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Contain)] [[play](https://go.dev/play/p/_454yEHcNjf)] - **ContainSubSlice** : 判断slice是否包含subslice。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ContainSubSlice)] [[play](https://go.dev/play/p/bcuQ3UT6Sev)] - **Chunk** : 按照size参数均分slice。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Chunk)] [[play](https://go.dev/play/p/b4Pou5j2L_C)] - **Compact** : 去除slice中的假值(false values are false, nil, 0, "")。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Compact)] [[play](https://go.dev/play/p/pO5AnxEr3TK)] - **Concat** : 合并多个slices到一个slice中。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Concat)] [[play](https://go.dev/play/p/gPt-q7zr5mk)] - **Count** : 返回切片中指定元素的个数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Count)] [[play](https://go.dev/play/p/Mj4oiEnQvRJ)] - **CountBy** : 遍历切片,对每个元素执行函数predicate. 返回符合函数返回值为true的元素的个数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#CountBy)] [[play](https://go.dev/play/p/tHOccTMDZCC)] - **Difference** : 创建一个切片,其元素不包含在另一个给定切片中。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Difference)] [[play](https://go.dev/play/p/VXvadzLzhDa)] - **DifferenceBy** : 将两个slice中的每个元素调用iteratee函数,并比较它们的返回值,如果不相等返回在slice中对应的值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DifferenceBy)] [[play](https://go.dev/play/p/DiivgwM5OnC)] - **DifferenceWith** : 接受比较器函数,该比较器被调用以将切片的元素与值进行比较。 结果值的顺序和引用由第一个切片确定。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DifferenceWith)] [[play](https://go.dev/play/p/v2U2deugKuV)] - **DeleteAt** : 删除切片中指定开始索引到结束索引的元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DeleteAt)] [[play](https://go.dev/play/p/pJ-d6MUWcvK)] - **Drop** : 创建一个切片,当n > 0时从开头删除n个元素,或者当n < 0时从结尾删除n个元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Drop)] [[play](https://go.dev/play/p/pJ-d6MUWcvK)] - **Equal** : 检查两个切片是否相等,相等条件:切片长度相同,元素顺序和值都相同。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Equal)] [[play](https://go.dev/play/p/WcRQJ37ifPa)] - **EqualWith** : 检查两个切片是否相等,相等条件:对两个切片的元素调用比较函数comparator,返回true。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#EqualWith)] [[play](https://go.dev/play/p/b9iygtgsHI1)] - **Every** : 如果切片中的所有值都通过谓词函数,则返回true。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Every)] [[play](https://go.dev/play/p/R8U6Sl-j8cD)] - **Filter** : 返回切片中通过predicate函数真值测试的所有元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Filter)] [[play](https://go.dev/play/p/SdPna-7qK4T)] - **Find** : 遍历切片的元素,返回第一个通过predicate函数真值测试的元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Find)] [[play](https://go.dev/play/p/CBKeBoHVLgq)] - **FindLast** : 从头到尾遍历slice的元素,返回最后一个通过predicate函数真值测试的元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#FindLast)] [[play](https://go.dev/play/p/FFDPV_j7URd)] - **Flatten** : 将多维切片展平一层。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Flatten)] [[play](https://go.dev/play/p/hYa3cBEevtm)] - **FlattenDeep** : 将多维切片递归展平到一层。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#FlattenDeep)] [[play](https://go.dev/play/p/yjYNHPyCFaF)] - **ForEach** : 遍历切片的元素并为每个元素调用iteratee函数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ForEach)] [[play](https://go.dev/play/p/DrPaa4YsHRF)] - **GroupBy** : 迭代切片的元素,每个元素将按条件分组,返回两个切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#GroupBy)] [[play](https://go.dev/play/p/QVkPxzPR0iA)] - **GroupWith** : 创建一个map,key是iteratee遍历slice中的每个元素返回的结果。值是切片元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#GroupWith)] [[play](https://go.dev/play/p/ApCvMNTLO8a)] - **IntSlicedeprecated** : 将接口切片转换为int切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#IntSlice)] [[play](https://go.dev/play/p/FdQXF0Vvqs-)] - **InterfaceSlicedeprecated** : 将值转换为interface切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#InterfaceSlice)] [[play](https://go.dev/play/p/FdQXF0Vvqs-)] - **Intersection** : 返回多个切片的交集。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Intersection)] [[play](https://go.dev/play/p/anJXfB5wq_t)] - **InsertAt** : 将元素插入到索引处的切片中。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#InsertAt)] [[play](https://go.dev/play/p/hMLNxPEGJVE)] - **IndexOf** : 返回在切片中找到值的第一个匹配项的索引,如果找不到值,则返回-1。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#IndexOf)] [[play](https://go.dev/play/p/MRN1f0FpABb)] - **LastIndexOf** : 返回在切片中找到最后一个值的索引,如果找不到该值,则返回-1。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#LastIndexOf)] [[play](https://go.dev/play/p/DokM4cf1IKH)] - **Map** : 对slice中的每个元素执行map函数以创建一个新切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Map)] [[play](https://go.dev/play/p/biaTefqPquw)] - **Merge** : 合并多个切片(不会消除重复元素)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Merge)] [[play](https://go.dev/play/p/lbjFp784r9N)] - **Reverse** : 反转切片中的元素顺序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Reverse)] [[play](https://go.dev/play/p/8uI8f1lwNrQ)] - **Reduce** : 将切片中的元素依次运行iteratee函数,返回运行结果。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Reduce)] [[play](https://go.dev/play/p/_RfXJJWIsIm)] - **Replace** : 返回切片的副本,其中前n个不重叠的old替换为new。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Replace)] [[play](https://go.dev/play/p/P5mZp7IhOFo)] - **ReplaceAll** : 返回切片的副本,将其中old全部替换为new。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ReplaceAll)] [[play](https://go.dev/play/p/CzqXMsuYUrx)] - **Repeat** : 创建一个切片,包含n个传入的item。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Repeat)] [[play](https://go.dev/play/p/1CbOmtgILUU)] - **Shuffle** : 随机打乱切片中的元素顺序。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Shuffle)] [[play](https://go.dev/play/p/YHvhnWGU3Ge)] - **Sort** : 对任何有序类型(数字或字符串)的切片进行排序,使用快速排序算法。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Sort)] [[play](https://go.dev/play/p/V9AVjzf_4Fk)] - **SortBy** : 按照less函数确定的升序规则对切片进行排序。排序不保证稳定性。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#SortBy)] [[play](https://go.dev/play/p/DAhLQSZEumm)] - **SortByFielddeprecated** : 按字段对结构切片进行排序。slice元素应为struct,字段类型应为int、uint、string或bool。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#SortByField)] [[play](https://go.dev/play/p/fU1prOBP9p1)] - **Some** : 如果列表中的任何值通过谓词函数,则返回true。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Some)] [[play](https://go.dev/play/p/4pO9Xf9NDGS)] - **StringSlicedeprecated** : 将接口切片转换为字符串切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#StringSlice)] [[play](https://go.dev/play/p/W0TZDWCPFcI)] - **SymmetricDifference** : 返回一个切片,其中的元素存在于参数切片中,但不同时存储在于参数切片中(交集取反)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#h42nJX5xMln)] [[play](https://go.dev/play/p/1CbOmtgILUU)] - **ToSlice** : 将可变参数转为切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ToSlice)] [[play](https://go.dev/play/p/YzbzVq5kscN)] - **ToSlicePointer** : 将可变参数转为指针切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ToSlicePointer)] [[play](https://go.dev/play/p/gx4tr6_VXSF)] - **Unique** : 删除切片中的重复元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Unique)] [[play](https://go.dev/play/p/AXw0R3ZTE6a)] - **UniqueBy** : 对切片的每个元素调用iteratee函数,然后删除重复元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UniqueBy)] [[play](https://go.dev/play/p/UR323iZLDpv)] - **Union** : 合并多个切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Union)] [[play](https://go.dev/play/p/hfXV1iRIZOf)] - **UnionBy** : 对切片的每个元素调用函数后,合并多个切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UnionBy)] [[play](https://go.dev/play/p/HGKHfxKQsFi)] - **UpdateAt** : 更新索引处的切片元素。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UpdateAt)] [[play](https://go.dev/play/p/f3mh2KloWVm)] - **Without** : 创建一个不包括所有给定值的切片。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Without)] [[play](https://go.dev/play/p/bwhEXEypThg)] - **KeyBy** :将切片每个元素调用函数后转为map。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#KeyBy)] [[play](https://go.dev/play/p/uXod2LWD1Kg)] ### 17. strutil 包含字符串处理的相关函数。 ```go import "github.com/duke-git/lancet/v2/strutil" ``` #### 函数列表: - **After** : 返回源字符串中指定字符串首次出现时的位置之后的子字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#After)] [[play](https://go.dev/play/p/RbCOQqCDA7m)] - **AfterLast** : 返回源字符串中指定字符串最后一次出现时的位置之后的子字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#AfterLast)] [[play](https://go.dev/play/p/1TegARrb8Yn)] - **Before** : 返回源字符串中指定字符串第一次出现时的位置之前的子字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Before)] [[play](https://go.dev/play/p/JAWTZDS4F5w)] - **BeforeLast** : 返回源字符串中指定字符串最后一次出现时的位置之前的子字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#BeforeLast)] [[play](https://go.dev/play/p/pJfXXAoG_Te)] - **CamelCase** : 将字符串转换为 CamelCase 驼峰式字符串, 非字母和数字会被忽略。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#CamelCase)] [[play](https://go.dev/play/p/9eXP3tn2tUy)] - **Capitalize** : 将字符串的第一个字符转换为大写。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Capitalize)] [[play](https://go.dev/play/p/2OAjgbmAqHZ)] - **IsString** : 判断传入参数的数据类型是否为字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#IsString)] [[play](https://go.dev/play/p/IOgq7oF9ERm)] - **KebabCase** : 将字符串转换为 kebab-case 形式字符串, 非字母和数字会被忽略。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#KebabCase)] [[play](https://go.dev/play/p/dcZM9Oahw-Y)] - **UpperKebabCase** : 将字符串转换为大写 KEBAB-CASE 形式字符串, 非字母和数字会被忽略。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#UpperKebabCase)] [[play](https://go.dev/play/p/zDyKNneyQXk)] - **LowerFirst** : 将字符串的第一个字符转换为小写形式。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#LowerFirst)] [[play](https://go.dev/play/p/CbzAyZmtJwL)] - **UpperFirst** : 将字符串的第一个字符转换为大写形式。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#UpperFirst)] [[play](https://go.dev/play/p/sBbBxRbs8MM)] - **PadEnd** : 如果字符串短于限制大小,则在右侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#PadEnd)] [[play](https://go.dev/play/p/9xP8rN0vz--)] - **PadStart** : 如果字符串短于限制大小,则在左侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#PadStart)] [[play](https://go.dev/play/p/xpTfzArDfvT)] - **Reverse** : 返回字符顺序与给定字符串相反的字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Reverse)] [[play](https://go.dev/play/p/adfwalJiecD)] - **SnakeCase** : 将字符串转换为 snake_case 形式, 非字母和数字会被忽略。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#SnakeCase)] [[play](https://go.dev/play/p/tgzQG11qBuN)] - **UpperSnakeCase** : 将字符串转换为大写 SNAKE_CASE 形式, 非字母和数字会被忽略。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#UpperSnakeCase)] [[play](https://go.dev/play/p/4COPHpnLx38)] - **SplitEx** : 拆分给定的字符串可以控制结果切片是否包含空字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#SplitEx)] [[play](https://go.dev/play/p/Us-ySSbWh-3)] - **Substring** : 根据指定的位置和长度截取子字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil.md#Substring)] - **Wrap** : 用给定字符包裹传入的字符串 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Wrap)] [[play](https://go.dev/play/p/KoZOlZDDt9y)] - **Unwrap** : 从另一个字符串中解开一个给定的字符串。 将更改源字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Unwrap)] [[play](https://go.dev/play/p/Ec2q4BzCpG-)] ### 18. system 包含 os, runtime, shell command 的相关函数。 ```go import "github.com/duke-git/lancet/v2/system" ``` #### 函数列表: - **IsWindows** : 检查当前操作系统是否是 windows。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#IsWindows)] [[play](https://go.dev/play/p/XzJULbzmf9m)] - **IsLinux** : 检查当前操作系统是否是 linux。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#IsLinux)] [[play](https://go.dev/play/p/zIflQgZNuxD)] - **IsMac** : 检查当前操作系统是否是 macos。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#IsMac)] [[play](https://go.dev/play/p/Mg4Hjtyq7Zc)] - **GetOsEnv** : 根据 key 获取对应的环境变量值 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#GetOsEnv)] [[play](https://go.dev/play/p/D88OYVCyjO-)] - **SetOsEnv** : 设置环境变量。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#SetOsEnv)] [[play](https://go.dev/play/p/D88OYVCyjO-)] - **RemoveOsEnv** : 删除环境变量。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#RemoveOsEnv)] [[play](https://go.dev/play/p/fqyq4b3xUFQ)] - **CompareOsEnv** : 换取环境变量并与传入值进行比较。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#CompareOsEnv)] [[play](https://go.dev/play/p/BciHrKYOHbp)] - **ExecCommand** : 执行 shell 命令。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#ExecCommand)] [[play](https://go.dev/play/p/n-2fLyZef-4)] - **GetOsBits** : 获取当前操作系统位数(32/64)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/system_zh-CN#GetOsBits)] [[play](https://go.dev/play/p/ml-_XH3gJbW)] ### 19. validator 验证器包,包含常用字符串格式验证函数。 ```go import "github.com/duke-git/lancet/v2/validator" ``` #### 函数列表: - **ContainChinese** : 验证字符串是否包含中文字符。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#ContainChinese)] [[play](https://go.dev/play/p/7DpU0uElYeM)] - **ContainLetter** : 验证字符串是否包含至少一个英文字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#ContainLetter)] [[play](https://go.dev/play/p/lqFD04Yyewp)] - **ContainLower** : 验证字符串是否包含至少一个英文小写字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#ContainLower)] [[play](https://go.dev/play/p/Srqi1ItvnAA)] - **ContainUpper** : 验证字符串是否包含至少一个英文大写字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#ContainUpper)] [[play](https://go.dev/play/p/CmWeBEk27-z)] - **IsAlpha** : 验证字符串是否只包含英文字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsAlpha)] [[play](https://go.dev/play/p/7Q5sGOz2izQ)] - **IsAllUpper** : 验证字符串是否全是大写英文字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsAllUpper)] [[play](https://go.dev/play/p/ZHctgeK1n4Z)] - **IsAllLower** : 验证字符串是否全是小写英文字母。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsAllLower)] [[play](https://go.dev/play/p/GjqCnOfV6cM)] - **IsBase64** : 验证字符串是否是base64编码。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsBase64)] [[play](https://go.dev/play/p/sWHEySAt6hl)] - **IsChineseMobile** : 验证字符串是否是中国手机号码。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsChineseMobile)] [[play](https://go.dev/play/p/GPYUlGTOqe3)] - **IsChineseIdNum** : 验证字符串是否是中国身份证号码。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsChineseIdNum)] [[play](https://go.dev/play/p/d8EWhl2UGDF)] - **IsChinesePhone** : 验证字符串是否是中国电话座机号码(xxx-xxxxxxxx or xxxx-xxxxxxx.)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsChinesePhone)] [[play](https://go.dev/play/p/RUD_-7YZJ3I)] - **IsCreditCard** : 验证字符串是否是信用卡号码。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsCreditCard)] [[play](https://go.dev/play/p/sNwwL6B0-v4)] - **IsDns** : 验证字符串是否是有效dns。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsDns)] [[play](https://go.dev/play/p/jlYApVLLGTZ)] - **IsEmail** : 验证字符串是否是有效电子邮件地址。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsEmail)] [[play](https://go.dev/play/p/Os9VaFlT33G)] - **IsEmptyString** : 验证字符串是否是空字符串。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsEmptyString)] [[play](https://go.dev/play/p/dpzgUjFnBCX)] - **IsFloatStr** : 验证字符串是否是可以转换为浮点数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#LOYwS_Oyl7U)] [[play](https://go.dev/play/p/LOYwS_Oyl7U)] - **IsNumberStr** : 验证字符串是否是可以转换为数字。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsNumberStr)] [[play](https://go.dev/play/p/LzaKocSV79u)] - **IsJSON** : 验证字符串是否是有效json。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsJSON)] [[play](https://go.dev/play/p/sRS6c4K8jGk)] - **IsRegexMatch** : 验证字符串是否可以匹配正则表达式。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsRegexMatch)] [[play](https://go.dev/play/p/z_XeZo_litG)] - **IsIntStr** : 验证字符串是否是可以转换为整数。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIntStr)] [[play](https://go.dev/play/p/jQRtFv-a0Rk)] - **IsIp** : 验证字符串是否是ip地址。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIp)] [[play](https://go.dev/play/p/FgcplDvmxoD)] - **IsIpV4** : 验证字符串是否是ipv4地址。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIpV4)] [[play](https://go.dev/play/p/zBGT99EjaIu)] - **IsIpV6** : 验证字符串是否是ipv6地址。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIpV6)] [[play](https://go.dev/play/p/AHA0r0AzIdC)] - **IsStrongPassword** : 验证字符串是否是强密码:(字母+数字+特殊字符)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsStrongPassword)] [[play](https://go.dev/play/p/QHdVcSQ3uDg)] - **IsUrl** : 验证字符串是否是url。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsUrl)] [[play](https://go.dev/play/p/pbJGa7F98Ka)] - **IsWeakPassword** : 验证字符串是否是弱密码(只包含字母+数字)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsWeakPassword)] [[play](https://go.dev/play/p/wqakscZH5gH)] - **IsZeroValue** : 判断传入的参数值是否为零值。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsZeroValue)] [[play](https://go.dev/play/p/UMrwaDCi_t4)] - **IsGBK** : 检查数据编码是否为gbk(汉字内部代码扩展规范)。 [[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsGBK)] [[play](https://go.dev/play/p/E2nt3unlmzP)] ### 20. xerror 包实现一些错误处理函数 ```go import "github.com/duke-git/lancet/v2/xerror" ``` #### 函数列表: - [Unwrap](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#Unwrap) ## 如何贡献代码 非常感激任何的代码提交以使 lancet 的功能越来越强大。创建 pull request 时请遵守以下规则。 1. Fork lancet 仓库。 2. 创建自己的特性分支。 3. 提交变更。 4. Push 分支。 5. 创建新的 pull request。