# lancet
**Repository Path**: aviptle/lancet
## Basic Information
- **Project Name**: lancet
- **Description**: No description available
- **Primary Language**: Go
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-08-28
- **Last Updated**: 2024-09-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

[](https://github.com/duke-git/lancet/releases)
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
[](https://goreportcard.com/report/github.com/duke-git/lancet/v2)
[](https://github.com/duke-git/lancet/actions/workflows/codecov.yml)
[](https://codecov.io/gh/duke-git/lancet)
[](https://github.com/duke-git/lancet/blob/main/LICENSE)
lancet(柳叶刀)是一个全面、高效、可复用的go语言工具函数库。 lancet受到了java apache common包和lodash.js的启发。
## 官网 | [English](./README.md)
## 特性
- 👏 全面、高效、可复用。
- 💪 600+常用 go 工具函数,支持 string、slice、datetime、net、crypt...
- 💅 只依赖 go 标准库和 golang.org/x。
- 🌍 所有导出函数单元测试覆盖率 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.4.3。
```go
go get github.com/duke-git/lancet// 使用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
}
```
## 文档
### 目录
- [Algorithm](#user-content-algorithm)
- [Compare](#user-content-compare)
- [Concurrency](#user-content-concurrency)
- [Condition](#user-content-condition)
- [Convertor](#user-content-convertor)
- [Cryptor](#user-content-cryptor)
- [Datetime](#user-content-datetime)
- [Datastructure](#user-content-datastructure)
- [Fileutil](#user-content-fileutil)
- [Formatter](#user-content-formatter)
- [Function](#user-content-function)
- [Maputil](#user-content-maputil)
- [Mathutil](#user-content-mathutil)
- [Netutil](#user-content-netutil)
- [Pointer](#user-content-pointer)
- [Random](#user-content-random)
- [Retry](#user-content-retry)
- [Slice](#user-content-slice)
- [Stream](#user-content-stream)
- [Structs](#user-content-structs)
- [Strutil](#user-content-strutil)
- [System](#user-content-system)
- [Tuple](#user-content-tuple)
- [Validator](#user-content-validator)
- [Xerror](#user-content-xerror)
1. algorithm 包实现一些基本查找和排序算法。 回到目录
```go
import "github.com/duke-git/lancet/v2/algorithm"
```
#### 函数列表:
- **BubbleSort** : 使用冒泡排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#BubbleSort)]
[[play](https://go.dev/play/p/GNdv7Jg2Taj)]
- **CountSort** : 使用计数排序算法对切片进行排序。不改变原数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#CountSort)]
[[play](https://go.dev/play/p/tB-Umgm0DrP)]
- **HeapSort** : 使用堆排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#HeapSort)]
[[play](https://go.dev/play/p/u6Iwa1VZS_f)]
- **InsertionSort** : 使用插入排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#InsertionSort)]
[[play](https://go.dev/play/p/G5LJiWgJJW6)]
- **MergeSort** : 使用合并排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#MergeSort)]
[[play](https://go.dev/play/p/ydinn9YzUJn)]
- **QuickSort** : 使用快速排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#QuickSort)]
[[play](https://go.dev/play/p/7Y7c1Elk3ax)]
- **SelectionSort** : 使用选择排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#SelectionSort)]
[[play](https://go.dev/play/p/oXovbkekayS)]
- **ShellSort** : 使用希尔排序算法对切片进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#ShellSort)]
[[play](https://go.dev/play/p/3ibkszpJEu3)]
- **BinarySearch** : 返回排序切片中目标值的索引,使用二分搜索(递归调用)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#BinarySearch)]
[[play](https://go.dev/play/p/t6MeGiUSN47)]
- **BinaryIterativeSearch** :返回排序切片中目标值的索引,使用二分搜索(非递归)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#BinaryIterativeSearch)]
[[play](https://go.dev/play/p/Anozfr8ZLH3)]
- **LinearSearch** : 基于传入的相等函数返回切片中目标值的索引。(线性查找)
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#LinearSearch)]
[[play](https://go.dev/play/p/IsS7rgn5s3x)]
- **LRUCache** : 应用 lru 算法实现内存缓存.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/algorithm.md#LRUCache)]
[[play](https://go.dev/play/p/-EZjgOURufP)]
2. compare 包提供几个轻量级的类型比较函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/compare"
```
#### 函数列表:
- **Equal** : 检查两个值是否相等(检查类型和值)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#Equal)]
[[play](https://go.dev/play/p/wmVxR-to4lz)]
- **EqualValue** : 检查两个值是否相等(只检查值)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#EqualValue)]
[[play](https://go.dev/play/p/fxnna_LLD9u)]
- **LessThan** : 验证参数`left`的值是否小于参数`right`的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#LessThan)]
[[play](https://go.dev/play/p/cYh7FQQj0ne)]
- **GreaterThan** : 验证参数`left`的值是否大于参数`right`的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#GreaterThan)]
[[play](https://go.dev/play/p/9-NYDFZmIMp)]
- **LessOrEqual** : 验证参数`left`的值是否小于或等于参数`right`的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#LessOrEqual)]
[[play](https://go.dev/play/p/e4T_scwoQzp)]
- **GreaterOrEqual** : 验证参数`left`的值是否大于或等于参数`right`的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#GreaterOrEqual)]
[[play](https://go.dev/play/p/vx8mP0U8DFk)]
- **InDelta** : 检查增量内两个值是否相等。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/compare.md#InDelta)]
3. concurrency 包含一些支持并发编程的功能。例如:goroutine, channel, async 等。 回到目录
```go
import "github.com/duke-git/lancet/v2/concurrency"
```
#### 函数列表:
- **NewChannel** : 返回一个 Channel 指针实例。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#NewChannel)]
[[play](https://go.dev/play/p/7aB4KyMMp9A)]
- **Bridge** : 将多个 channel 链接到一个 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/Bridge.md#NewChannel)]
[[play](https://go.dev/play/p/qmWSy1NVF-Y)]
- **FanIn** : 将多个 channel 合并为一个 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#FanIn)]
[[play](https://go.dev/play/p/2VYFMexEvTm)]
- **Generate** : 根据传入的值,生成 channel。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Generate)]
[[play](https://go.dev/play/p/7aB4KyMMp9A)]
- **Or** : 将一个或多个 channel 读取到一个 channel 中,当任何读取 channel 关闭时将结束读取。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Or)]
[[play](https://go.dev/play/p/Wqz9rwioPww)]
- **OrDone** : 将一个 channel 读入另一个 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#OrDone)]
[[play](https://go.dev/play/p/lm_GoS6aDjo)]
- **Repeat** : 返回一个 channel,将参数`values`重复放入 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Repeat)]
[[play](https://go.dev/play/p/k5N_ALVmYjE)]
- **RepeatFn** : 返回一个 channel,重复执行函数 fn,并将结果放入返回的 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#RepeatFn)]
[[play](https://go.dev/play/p/4J1zAWttP85)]
- **Take** : 返回一个 channel,其值从另一个 channel 获取,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Take)]
[[play](https://go.dev/play/p/9Utt-1pDr2J)]
- **Tee** : 将一个 channel 分成两个 channel,直到取消上下文。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Tee)]
[[play](https://go.dev/play/p/3TQPKnCirrP)]
4. condition 包含一些用于条件判断的函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/condition"
```
#### 函数列表:
- **Bool** : 返回传入参数的 bool 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.md#Bool)]
[[play](https://go.dev/play/p/ETzeDJRSvhm)]
- **And** : 逻辑且操作,当切仅当 a 和 b 都为 true 时返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.md#And)]
[[play](https://go.dev/play/p/W1SSUmt6pvr)]
- **Or** : 逻辑或操作,当切仅当 a 和 b 都为 false 时返回 false。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.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/api/packages/condition.md#Xor)]
[[play](https://go.dev/play/p/gObZrW7ZbG8)]
- **Nor** : 异或的取反操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.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/api/packages/condition.md#Xnor)]
[[play](https://go.dev/play/p/OuDB9g51643)]
- **Nand** : 如果 a 和 b 都为真,返回 false,否则返回 true
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.md#Nand)]
[[play](https://go.dev/play/p/vSRMLxLIbq8)]
- **TernaryOperator** : 三元运算符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/condition.md#TernaryOperator)]
[[play](https://go.dev/play/p/ElllPZY0guT)]
5. convertor 转换器包支持一些常见的数据类型转换。 回到目录
```go
import "github.com/duke-git/lancet/v2/convertor"
```
#### 函数列表:
- **ColorHexToRGB** : 颜色值十六进制转 rgb。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ColorHexToRGB)]
[[play](https://go.dev/play/p/o7_ft-JCJBV)]
- **ColorRGBToHex** : 颜色值 rgb 转十六进制。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ColorRGBToHex)]
[[play](https://go.dev/play/p/nzKS2Ro87J1)]
- **ToBool** : 字符串转布尔类型,使用 strconv.ParseBool。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToBool)]
[[play](https://go.dev/play/p/ARht2WnGdIN)]
- **ToBytes** : interface 转字节切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToBytes)]
[[play](https://go.dev/play/p/fAMXYFDvOvr)]
- **ToChar** : 字符串转字符切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToChar)]
[[play](https://go.dev/play/p/JJ1SvbFkVdM)]
- **ToChannel** : 将切片转为只读 channel。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.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/api/packages/convertor.md#ToFloat)]
[[play](https://go.dev/play/p/4YTmPCibqHJ)]
- **ToInt** : 将 interface 转成 int64 类型,如果参数无法转换,会返回 0 和 error。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.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/api/packages/convertor.md#ToJson)]
[[play](https://go.dev/play/p/2rLIkMmXWvR)]
- **ToMap** : 将切片转为 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToMap)]
[[play](https://go.dev/play/p/tVFy7E-t24l)]
- **ToPointer** : 返回传入值的指针。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToPointer)]
[[play](https://go.dev/play/p/ASf_etHNlw1)]
- **ToString** : 将值转换为字符串,对于数字、字符串、[]byte,将转换为字符串。 对于其他类型(切片、映射、数组、结构)将调用 json.Marshal。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToString)]
[[play](https://go.dev/play/p/nF1zOOslpQq)]
- **StructToMap** : 将 struct 转成 map,只会转换 struct 中可导出的字段。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#StructToMap)]
[[play](https://go.dev/play/p/KYGYJqNUBOI)]
- **MapToSlice** : map 中 key 和 value 执行函数 iteratee 后,转为切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#MapToSlice)]
[[play](https://go.dev/play/p/dmX4Ix5V6Wl)]
- **EncodeByte** : 将传入的 data 编码成字节切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#EncodeByte)]
[[play](https://go.dev/play/p/DVmM1G5JfuP)]
- **DecodeByte** : 解码字节切片到目标对象,目标对象需要传入一个指针实例。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#DecodeByte)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
- **DeepClone** : 创建一个传入值的深拷贝, 无法克隆结构体的非导出字段。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#DeepClone)]
[[play](https://go.dev/play/p/j4DP5dquxnk)]
- **CopyProperties** : 拷贝不同结构体之间的同名字段。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#CopyProperties)]
[[play](https://go.dev/play/p/oZujoB5Sgg5)]
- **ToInterface** : 将反射值转换成对应的 interface 类型。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToInterface)]
[[play](https://go.dev/play/p/syqw0-WG7Xd)]
- **Utf8ToGbk** : utf8 编码转 GBK 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#Utf8ToGbk)]
[[play](https://go.dev/play/p/9FlIaFLArIL)]
- **GbkToUtf8** : GBK 编码转 utf8 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#GbkToUtf8)]
[[play](https://go.dev/play/p/OphmHCN_9u8)]
- **ToStdBase64** : 将值转换为StdBase64编码的字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToStdBase64)]
- **ToUrlBase64** : 将值转换为url Base64编码的字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToUrlBase64)]
- **ToRawStdBase64** : 将值转换为RawStdBase64编码的字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawStdBase64)]
- **ToRawUrlBase64** : 将值转换为RawUrlBase64编码的字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawUrlBase64)]
6. 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/api/packages/cryptor.md#AesEcbEncrypt)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
- **AesEcbDecrypt** : 使用 AES ECB 算法模解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesEcbDecrypt)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
- **AesCbcEncrypt** : 使用 AES CBC 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesCbcEncrypt)]
[[play](https://go.dev/play/p/IOq_g8_lKZD)]
- **AesCbcDecrypt** : 使用 AES CBC 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesCbcDecrypt)]
[[play](https://go.dev/play/p/IOq_g8_lKZD)]
- **AesCtrCrypt** : 使用 AES CTR 算法模式加密/解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesCtrCrypt)]
[[play](https://go.dev/play/p/SpaZO0-5Nsp)]
- **AesCfbEncrypt** : 使用 AES CFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesCfbEncrypt)]
[[play](https://go.dev/play/p/tfkF10B13kH)]
- **AesCfbDecrypt** : 使用 AES CFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesCfbDecrypt)]
[[play](https://go.dev/play/p/tfkF10B13kH)]
- **AesOfbEncrypt** : 使用 AES OFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesOfbEncrypt)]
[[play](https://go.dev/play/p/VtHxtkUj-3F)]
- **AesOfbDecrypt** : 使用 AES OFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#AesOfbDecrypt)]
[[play](https://go.dev/play/p/VtHxtkUj-3F)]
- **Base64StdEncode** : 将字符串 base64 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Base64StdEncode)]
[[play](https://go.dev/play/p/VOaUyQUreoK)]
- **Base64StdDecode** : 解码 base64 字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Base64StdDecode)]
[[play](https://go.dev/play/p/RWQylnJVgIe)]
- **DesEcbEncrypt** : 使用 DES ECB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesEcbEncrypt)]
[[play](https://go.dev/play/p/8qivmPeZy4P)]
- **DesEcbDecrypt** : 使用 DES ECB 算法模解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesEcbDecrypt)]
[[play](https://go.dev/play/p/8qivmPeZy4P)]
- **DesCbcEncrypt** : 使用 DES CBC 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesCbcEncrypt)]
[[play](https://go.dev/play/p/4cC4QvWfe3_1)]
- **DesCbcDecrypt** : 使用 DES CBC 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesCbcDecrypt)]
[[play](https://go.dev/play/p/4cC4QvWfe3_1)]
- **DesCtrCrypt** : 使用 DES CTR 算法模式加密/解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesCtrCrypt)]
[[play](https://go.dev/play/p/9-T6OjKpcdw)]
- **DesCfbEncrypt** : 使用 DES CFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesCfbEncrypt)]
[[play](https://go.dev/play/p/y-eNxcFBlxL)]
- **DesCfbDecrypt** : 使用 DES CFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesCfbDecrypt)]
[[play](https://go.dev/play/p/y-eNxcFBlxL)]
- **DesOfbEncrypt** : 使用 DES OFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesOfbEncrypt)]
[[play](https://go.dev/play/p/74KmNadjN1J)]
- **DesOfbDecrypt** : 使用 DES OFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#DesOfbDecrypt)]
[[play](https://go.dev/play/p/74KmNadjN1J)]
- **HmacMd5** : 返回字符串 md5 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacMd5)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
- **HmacMd5WithBase64** : 获取字符串 md5 hmac base64 字符串值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacMd5WithBase64)]
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacMd5WithBase64)]
- **HmacSha1** : 返回字符串 sha1 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha1)]
[[play](https://go.dev/play/p/1UI4oQ4WXKM)]
- **HmacSha1WithBase64** : 获取字符串的 sha1 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha1WithBase64)]
[[play](https://go.dev/play/p/47JmmGrnF7B)]
- **HmacSha256** : 返回字符串 sha256 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha256)]
[[play](https://go.dev/play/p/HhpwXxFhhC0)]
- **HmacSha256WithBase64** : 获取字符串 sha256 hmac base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha256WithBase64)]
[[play](https://go.dev/play/p/EKbkUvPTLwO)]
- **HmacSha512** : 返回字符串 sha256 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha512)]
[[play](https://go.dev/play/p/59Od6m4A0Ud)]
- **HmacSha512WithBase64** : 获取字符串 sha512 hmac base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#HmacSha512WithBase64)]
[[play](https://go.dev/play/p/c6dSe3E2ydU)]
- **Md5Byte** : 返回 byte slice 的 md5 值.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Md5Byte)]
[[play](https://go.dev/play/p/suraalH8lyC)]
- **Md5ByteWithBase64** : 获取 byte slice 的 md5 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Md5ByteWithBase64)]
[[play](https://go.dev/play/p/Tcb-Z7LN2ax)]
- **Md5String** : 返回字符串 md5 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Md5String)]
[[play](https://go.dev/play/p/1bLcVetbTOI)]
- **Md5StringWithBase64** : 获取字符串 md5 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Md5StringWithBase64)]
[[play](https://go.dev/play/p/Lx4gH7Vdr5_y)]
- **Md5File** : 返回文件 md5 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Md5File)]
- **Sha1** : 返回字符串 sha1 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha1)]
[[play](https://go.dev/play/p/_m_uoD1deMT)]
- **Sha1WithBase64** : 获取字符串 sha1 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha1WithBase64)]
[[play](https://go.dev/play/p/fSyx-Gl2l2-)]
- **Sha256** :返回字符串 sha256 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha256)]
[[play](https://go.dev/play/p/tU9tfBMIAr1)]
- **Sha256WithBase64** : 获取字符串 sha256 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha256WithBase64)]
[[play](https://go.dev/play/p/85IXJHIal1k)]
- **Sha512** : 返回字符串 sha512 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha512)]
[[play](https://go.dev/play/p/3WsvLYZxsHa)]
- **Sha512WithBase64** : 获取字符串 sha512 base64 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#Sha512WithBase64)]
[[play](https://go.dev/play/p/q_fY2rA-k5I)]
- **GenerateRsaKey** : 在当前目录下创建 rsa 私钥文件和公钥文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#GenerateRsaKey)]
[[play](https://go.dev/play/p/zutRHrDqs0X)]
- **RsaEncrypt** : 用公钥文件 ras 加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaEncrypt)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
- **RsaDecrypt** : 用私钥文件 rsa 解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecrypt)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
- **GenerateRsaKeyPair** : 创建rsa公钥私钥和key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#GenerateRsaKeyPair)]
[[play](https://go.dev/play/p/sSVmkfENKMz)]
- **RsaEncryptOAEP** : rsa OAEP加密。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaEncryptOAEP)]
[[play](https://go.dev/play/p/sSVmkfENKMz)]
- **RsaDecryptOAEP** : rsa OAEP解密。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecryptOAEP)]
[[play](https://go.dev/play/p/sSVmkfENKMz)]
7. datetime 日期时间处理包,格式化日期,比较日期。 回到目录
```go
import "github.com/duke-git/lancet/v2/datetime"
```
#### 函数列表:
- **AddDay** : 将日期加/减天数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#AddDay)]
[[play](https://go.dev/play/p/dIGbs_uTdFa)]
- **AddHour** : 将日期加/减小时数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#AddHour)]
[[play](https://go.dev/play/p/rcMjd7OCsi5)]
- **AddMinute** : 将日期加/减分钟数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#AddMinute)]
[[play](https://go.dev/play/p/nT1heB1KUUK)]
- **AddYear** : 将日期加/减分年数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#AddYear)]
[[play](https://go.dev/play/p/MqW2ujnBx10)]
- **BeginOfMinute** : 返回指定时间的分钟开始时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfMinute)]
[[play](https://go.dev/play/p/ieOLVJ9CiFT)]
- **BeginOfHour** : 返回指定时间的小时开始时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfHour)]
[[play](https://go.dev/play/p/GhdGFnDWpYs)]
- **BeginOfDay** : 返回指定时间的当天开始时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfDay)]
[[play](https://go.dev/play/p/94m_UT6cWs9)]
- **BeginOfWeek** : 返回指定时间的每周开始时间,默认开始时间星期日。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfWeek)]
[[play](https://go.dev/play/p/ynjoJPz7VNV)]
- **BeginOfMonth** : 返回指定时间的当月开始时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfMonth)]
[[play](https://go.dev/play/p/bWXVFsmmzwL)]
- **BeginOfYear** : 返回指定时间的当年开始时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BeginOfYear)]
[[play](https://go.dev/play/p/i326DSwLnV8)]
- **EndOfMinute** : 返回指定时间的分钟结束时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfMinute)]
[[play](https://go.dev/play/p/yrL5wGzPj4z)]
- **EndOfHour** : 返回指定时间的小时结束时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfHour)]
[[play](https://go.dev/play/p/6ce3j_6cVqN)]
- **EndOfDay** : 返回指定时间的当天结束时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfDay)]
[[play](https://go.dev/play/p/eMBOvmq5Ih1)]
- **EndOfWeek** : 返回指定时间的星期结束时间,默认结束时间星期六。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfWeek)]
[[play](https://go.dev/play/p/i08qKXD9flf)]
- **EndOfMonth** : 返回指定时间的月份结束时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfMonth)]
[[play](https://go.dev/play/p/_GWh10B3Nqi)]
- **EndOfYear** : 返回指定时间的年份结束时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#EndOfYear)]
[[play](https://go.dev/play/p/G01cKlMCvNm)]
- **GetNowDate** : 获取当天日期,返回格式:yyyy-mm-dd。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GetNowDate)]
[[play](https://go.dev/play/p/PvfkPpcpBBf)]
- **GetNowTime** : 获取当时时间,返回格式:hh:mm:ss。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.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/api/packages/datetime.md#GetNowDateTime)]
[[play](https://go.dev/play/p/pI4AqngD0al)]
- **GetTodayStartTime** : 返回当天开始时间, 格式: yyyy-mm-dd 00:00:00。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GetTodayStartTime)]
[[play](https://go.dev/play/p/84siyYF7t99)]
- **GetTodayEndTime** : 返回当天结束时间,格式: yyyy-mm-dd 23:59:59。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GetTodayEndTime)]
[[play](https://go.dev/play/p/jjrLnfoqgn3)]
- **GetZeroHourTimestamp** : 获取零时时间戳(timestamp of 00:00)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GetZeroHourTimestamp)]
[[play](https://go.dev/play/p/QmL2oIaGE3q)]
- **GetNightTimestamp** : 获取午夜时间戳(timestamp of 23:59)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GetNightTimestamp)]
[[play](https://go.dev/play/p/UolysR3MYP1)]
- **FormatTimeToStr** : 将日期格式化成字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#FormatTimeToStr)]
[[play](https://go.dev/play/p/_Ia7M8H_OvE)]
- **FormatStrToTime** : 将字符串格式化成时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#FormatStrToTime)]
[[play](https://go.dev/play/p/1h9FwdU8ql4)]
- **NewUnix** : 创建一个 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#NewUnix)]
[[play](https://go.dev/play/p/psoSuh_kLRt)]
- **NewUnixNow** : 创建一个当前时间的 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.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/api/packages/datetime.md#NewFormat)]
[[play](https://go.dev/play/p/VkW08ZOaXPZ)]
- **NewISO8601** : 创建一个 iso8601 格式时间字符串的 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#NewISO8601)]
[[play](https://go.dev/play/p/mkhOHQkdeA2)]
- **ToUnix** : 返回 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.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/api/packages/datetime.md#ToFormat)]
[[play](https://go.dev/play/p/VkW08ZOaXPZ)]
- **ToFormatForTpl** : 返回 tpl 格式指定的日期字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#ToFormatForTpl)]
[[play](https://go.dev/play/p/nyXxXcQJ8L5)]
- **ToIso8601** : 返回 iso8601 日期字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#ToIso8601)]
[[play](https://go.dev/play/p/mkhOHQkdeA2)]
- **IsLeapYear** :验证是否是闰年。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#IsLeapYear)]
[[play](https://go.dev/play/p/xS1eS2ejGew)]
- **BetweenSeconds** : 返回两个时间的间隔秒数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BetweenSeconds)]
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#BetweenSeconds)]
- **DayOfYear** : 返回参数日期是一年中的第几天。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#DayOfYear)]
[[play](https://go.dev/play/p/0hjqhTwFNlH)]
- **IsWeekend** : 判断日期是否是周末。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#IsWeekend)]
[[play](https://go.dev/play/p/cupRM5aZOIY)]
- **NowDateOrTime** : 根据指定的格式和时区返回当前时间字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#NowDateOrTime)]
[[play](https://go.dev/play/p/EZ-begEjtT0)]
- **Timestamp** : 返回当前秒级时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#Timestamp)]
[[play](https://go.dev/play/p/iU5b7Vvjx6x)]
- **TimestampMilli** : 返回当前毫秒级时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#TimestampMilli)]
[[play](https://go.dev/play/p/4gvEusOTu1T)]
- **TimestampMicro** : 返回当前微秒级时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#TimestampMicro)]
[[play](https://go.dev/play/p/2maANglKHQE)]
- **TimestampNano** : 返回当前纳秒级时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#TimestampNano)]
[[play](https://go.dev/play/p/A9Oq_COrcCF)]
8. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph。 回到目录
```go
import list "github.com/duke-git/lancet/v2/datastructure/list"
import copyonwritelist "github.com/duke-git/lancet/v2/datastructure/copyonwritelist"
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"
```
#### 函数列表:
- **List** : 线性表结构, 用切片实现。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/list.md)]
- **CopyOnWriteList** : 是一个线程安全的 List 实现,底层使用 go 切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/copyonwritelist.md)]
- **Link** : 链表解构, 包括单链表和双向链表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/link.md)]
- **Stack** : 栈结构(fifo), 包括数组栈和链表栈。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/stack.md)]
- **Queue** : 队列结构(filo), 包括数组队列,链表队列,循环队列,优先级队列。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/queue.md)]
- **Set** : 集合(set)结构。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/set.md)]
- **Tree** : 二叉搜索树。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/tree.md)]
- **Heap** : 二叉 max 堆。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/heap.md)]
- **Hashmap** : 哈希映射。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datastructure/hashmap.md)]
9. fileutil 包含文件基本操作。 回到目录
```go
import "github.com/duke-git/lancet/v2/fileutil"
```
#### 函数列表:
- **ClearFile** : 清空文件内容。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ClearFile)]
[[play](https://go.dev/play/p/NRZ0ZT-G94H)]
- **CreateFile** : 创建文件,创建成功返回 true, 否则返回 false。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#CreateFile)]
[[play](https://go.dev/play/p/lDt8PEsTNKI)]
- **CreateDir** : 创建嵌套目录,例如/a/, /a/b/。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#CreateDir)]
[[play](https://go.dev/play/p/qUuCe1OGQnM)]
- **CopyFile** : 拷贝文件,会覆盖原有的文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#CopyFile)]
[[play](https://go.dev/play/p/Jg9AMJMLrJi)]
- **CopyDir** : 拷贝目录。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#CopyDir)]
[[play](https://go.dev/play/p/YAyFTA_UuPb)]
- **FileMode** : 获取文件 mode 信息。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#FileMode)]
[[play](https://go.dev/play/p/2l2hI42fA3p)]
- **MiMeType** : 获取文件 mime 类型, 参数的类型必须是 string 或者\*os.File。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#MiMeType)]
[[play](https://go.dev/play/p/bd5sevSUZNu)]
- **IsExist** : 判断文件或目录是否存在。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#IsExist)]
[[play](https://go.dev/play/p/nKKXt8ZQbmh)]
- **IsLink** : 判断文件是否是符号链接。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#IsLink)]
[[play](https://go.dev/play/p/TL-b-Kzvf44)]
- **IsDir** : 判断参数是否是目录。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#IsDir)]
[[play](https://go.dev/play/p/WkVwEKqtOWk)]
- **ListFileNames** : 返回目录下所有文件名。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ListFileNames)]
[[play](https://go.dev/play/p/Tjd7Y07rejl)]
- **RemoveFile** : 删除文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#RemoveFile)]
[[play](https://go.dev/play/p/P2y0XW8a1SH)]
- **ReadFileToString** : 读取文件内容并返回字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadFileToString)]
[[play](https://go.dev/play/p/cmfwp_5SQTp)]
- **ReadFileByLine** : 按行读取文件内容,返回字符串切片包含每一行。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadFileByLine)]
[[play](https://go.dev/play/p/svJP_7ZrBrD)]
- **Zip** : zip 压缩文件, 参数可以是文件或目录。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#Zip)]
[[play](https://go.dev/play/p/j-3sWBp8ik_P)]
- **ZipAppendEntry** : 通过将单个文件或目录追加到现有的 zip 文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ZipAppendEntry)]
- **UnZip** : zip 解压缩文件并保存在目录中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#UnZip)]
[[play](https://go.dev/play/p/g0w34kS7B8m)]
- **CurrentPath** : 返回当前位置的绝对路径。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#CurrentPath)]
[[play](https://go.dev/play/p/s74a9iBGcSw)]
- **IsZipFile** : 判断文件是否是 zip 压缩文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#IsZipFile)]
[[play](https://go.dev/play/p/9M0g2j_uF_e)]
- **FileSize** : 返回文件字节大小。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#FileSize)]
[[play](https://go.dev/play/p/H9Z05uD-Jjc)]
- **MTime** : 返回文件修改时间(unix timestamp)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#MTime)]
[[play](https://go.dev/play/p/s_Tl7lZoAaY)]
- **Sha** : 返回文件 sha 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#Sha)]
[[play](https://go.dev/play/p/VfEEcO2MJYf)]
- **ReadCsvFile** : 读取 csv 文件内容到切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadCsvFile)]
[[play](https://go.dev/play/p/OExTkhGEd3_u)]
- **WriteCsvFile** : 向csv文件写入切片数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#WriteCsvFile)]
- **WriteMapsToCsv** : 将map切片写入csv文件中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#WriteMapsToCsv)]
[[play](https://go.dev/play/p/umAIomZFV1c)]
- **WriteBytesToFile** : 将 bytes 写入文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#WriteBytesToFile)]
[[play](https://go.dev/play/p/s7QlDxMj3P8)]
- **WriteStringToFile** : 将字符串写入文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#WriteStringToFile)]
[[play](https://go.dev/play/p/GhLS6d8lH_g)]
- **ReadFile** : 读取文件或者URL。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadFile)]
- **ChunkRead** : 从文件的指定偏移读取块并返回块内所有行。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ChunkRead)]
[[play](https://go.dev/play/p/r0hPmKWhsgf)]
- **ParallelChunkRead** : 并行读取文件并将每个块的行发送到指定通道。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ParallelChunkRead)]
[[play](https://go.dev/play/p/teMXnCsdSEw)]
```go
import "github.com/duke-git/lancet/v2/formatter"
```
#### 函数列表:
- **Comma** : 用逗号每隔 3 位分割数字/字符串,支持前缀添加符号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#Comma)]
[[play](https://go.dev/play/p/eRD5k2vzUVX)]
- **Pretty** : 返回 pretty JSON 字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#Pretty)]
[[play](https://go.dev/play/p/YsciGj3FH2x)]
- **PrettyToWriter** : Pretty encode 数据到 writer。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#PrettyToWriter)]
[[play](https://go.dev/play/p/LPLZ3lDi5ma)]
- **DecimalBytes** : 返回十进制标准(以 1000 为基数)下的可读字节单位字符串。precision 参数指定小数点后的位数,默认为 4。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#DecimalBytes)]
[[play](https://go.dev/play/p/FPXs1suwRcs)]
- **BinaryBytes** : 返回 binary 标准(以 1024 为基数)下的可读字节单位字符串。precision 参数指定小数点后的位数,默认为 4。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#BinaryBytes)]
[[play](https://go.dev/play/p/G9oHHMCAZxP)]
- **ParseDecimalBytes** : 将字节单位字符串转换成其所表示的字节数(以 1000 为基数)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#ParseDecimalBytes)]
[[play](https://go.dev/play/p/Am98ybWjvjj)]
- **ParseBinaryBytes** : 将字节单位字符串转换成其所表示的字节数(以 1024 为基数)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/formatter.md#ParseBinaryBytes)]
[[play](https://go.dev/play/p/69v1tTT62x8)]
11. function 函数包控制函数执行流程,包含部分函数式编程。 回到目录
```go
import "github.com/duke-git/lancet/v2/function"
```
#### 函数列表:
- **After** : 创建一个函数,当该函数被调用 n 或更多次之后将执行传入的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#After)]
[[play](https://go.dev/play/p/eRD5k2vzUVX)]
- **Before** : 创建一个函数,当该函数被调用不超过 n 次时,将执行执行传入的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Before)]
[[play](https://go.dev/play/p/0HqUDIFZ3IL)]
- **CurryFn** : 创建柯里化函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#CurryFn)]
[[play](https://go.dev/play/p/5HopfDwANKX)]
- **Compose** : 从右至左组合函数列表 fnList,返回组合后的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Compose)]
[[play](https://go.dev/play/p/KKfugD4PKYF)]
- **Delay** : 延迟 delay 时间后调用函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Delay)]
[[play](https://go.dev/play/p/Ivtc2ZE-Tye)]
- **Debounced** : 创建一个 debounced 函数,该函数延迟调用 fn 直到自上次调用 debounced 函数后等待持续时间过去。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Debounced)]
[[play](https://go.dev/play/p/absuEGB_GN7)]
- **Schedule** : 每次持续时间调用函数,直到关闭返回的 channel。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Schedule)]
[[play](https://go.dev/play/p/hbON-Xeyn5N)]
- **Pipeline** : 从右至左执行函数列表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Pipeline)]
[[play](https://go.dev/play/p/mPdUVvj6HD6)]
- **AcceptIf** : AcceptIf函数会返回另一个函数,该函数的签名与apply函数相同,但同时还会包含一个布尔值来表示成功或失败。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#AcceptIf)]
[[play](https://go.dev/play/p/XlXHHtzCf7d)]
- **And** : 返回一个复合谓词判断函数,该判断函数表示一组谓词的逻辑and操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#And)]
[[play](https://go.dev/play/p/dTBHJMQ0zD2)]
- **Or** : 返回一个复合谓词判断函数,该判断函数表示一组谓词的逻辑or操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Or)]
[[play](https://go.dev/play/p/LitCIsDFNDA)]
- **Negate** : 返回一个谓词函数,该谓词函数表示当前谓词的逻辑否定。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Negate)]
[[play](https://go.dev/play/p/jbI8BtgFnVE)]
- **Nor** : 返回一个复合谓词判断函数,该判断函数表示一组谓词的逻辑非或nor的操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Nor)]
[[play](https://go.dev/play/p/2KdCoBEOq84)]
- **Nand** : 返回一个复合谓词判断函数,该判断函数表示一组谓词的逻辑非与nand的操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Nand)]
[[play](https://go.dev/play/p/Rb-FdNGpgSO)]
- **Xnor** : 返回一个复合谓词判断函数,该判断函数表示一组谓词的逻辑异或xnor的操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Xnor)]
[[play](https://go.dev/play/p/FJxko8SFbqc)]
- **Watcher** : Watcher 用于记录代码执行时间。可以启动/停止/重置手表定时器。获取函数执行的时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Watcher)]
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
12. maputil 包括一些操作 map 的函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/maputil"
```
#### 函数列表:
- **MapTo** : 快速将 map 或者其他类型映射到结构体或者指定类型。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#MapTo)]
[[play](https://go.dev/play/p/4K7KBEPgS5M)]
- **ForEach** : 对 map 中的每对 key 和 value 执行 iteratee 函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.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/api/packages/maputil.md#Filter)]
[[play](https://go.dev/play/p/fSvF3wxuNG7)]
- **FilterByKeys** : 迭代 map, 返回一个新 map,其 key 都是给定的 key 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#FilterByKeys)]
[[play](https://go.dev/play/p/7ov6BJHbVqh)]
- **FilterByValues** : 迭代 map, 返回一个新 map,其 value 都是给定的 value 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#FilterByValues)]
[[play](https://go.dev/play/p/P3-9MdcXegR)]
- **OmitBy** : Filter 的反向操作, 迭代 map 中的每对 key 和 value, 删除符合 predicate 函数的 key, value, 返回新 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#OmitBy)]
[[play](https://go.dev/play/p/YJM4Hj5hNwm)]
- **OmitByKeys** : FilterByKeys 的反向操作, 迭代 map, 返回一个新 map,其 key 不包括给定的 key 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#OmitByKeys)]
[[play](https://go.dev/play/p/jXGrWDBfSRp)]
- **OmitByValues** : FilterByValues 的反向操作, 迭代 map, 返回一个新 map,其 value 不包括给定的 value 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#OmitByValues)]
[[play](https://go.dev/play/p/XB7Y10uw20_U)]
- **Intersect** : 多个 map 的交集操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Intersect)]
[[play](https://go.dev/play/p/Zld0oj3sjcC)]
- **Keys** : 返回 map 中所有 key 组成的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Keys)]
[[play](https://go.dev/play/p/xNB5bTb97Wd)]
- **KeysBy** : 创建一个切片,其元素是每个 map 的 key 调用 mapper 函数的结果。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil#KeysBy)]
[[play](https://go.dev/play/p/hI371iB8Up8)]
- **Merge** : 合并多个 map, 相同的 key 会被之后的 key 覆盖。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Merge)]
[[play](https://go.dev/play/p/H95LENF1uB-)]
- **Minus** : 返回一个 map,其中的 key 存在于 mapA,不存在于 mapB。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Minus)]
[[play](https://go.dev/play/p/3u5U9K7YZ9m)]
- **Values** : 返回 map 中所有 values 组成的切片
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Values)]
[[play](https://go.dev/play/p/CBKdUc5FTW6)]
- **ValuesBy** : 创建一个切片,其元素是每个 map 的 value 调用 mapper 函数的结果。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ValuesBy)]
[[play](https://go.dev/play/p/sg9-oRidh8f)]
- **MapKeys** : 操作 map 的每个 key,然后转为新的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#MapKeys)]
[[play](https://go.dev/play/p/8scDxWeBDKd)]
- **MapValues** : 操作 map 的每个 value,然后转为新的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#MapValues)]
[[play](https://go.dev/play/p/g92aY3fc7Iw)]
- **Entries** : 将 map 转换为键/值对切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Entries)]
[[play](https://go.dev/play/p/Ltb11LNcElY)]
- **FromEntries** : 基于键/值对的切片创建 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#FromEntries)]
[[play](https://go.dev/play/p/fTdu4sCNjQO)]
- **Transform** : 将 map 转换为其他类型的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#Transform)]
[[play](https://go.dev/play/p/P6ovfToM3zj)]
- **IsDisjoint** : 验证两个 map 是否具有不同的 key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#IsDisjoint)]
[[play](https://go.dev/play/p/N9qgYg_Ho6f)]
- **HasKey** : 检查 map 是否包含某个 key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#HasKey)]
[[play](https://go.dev/play/p/isZZHOsDhFc)]
- **GetOrSet** : 返回给定键的值,如果不存在则设置该值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#GetOrSet)]
[[play](https://go.dev/play/p/IVQwO1OkEJC)]
- **MapToStruct** : 将map转成struct。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#MapToStruct)]
[[play](https://go.dev/play/p/7wYyVfX38Dp)]
- **ToSortedSlicesDefault** : 将map的key和value转化成两个根据key的值从小到大排序的切片,value切片中元素的位置与key对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ToSortedSlicesDefault)]
[[play](https://go.dev/play/p/43gEM2po-qy)]
- **ToSortedSlicesWithComparator** : 将map的key和value转化成两个使用比较器函数根据key的值自定义排序规则的切片,value切片中元素的位置与key对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ToSortedSlicesWithComparator)]
[[play](https://go.dev/play/p/0nlPo6YLdt3)]
- **NewConcurrentMap** : ConcurrentMap 协程安全的 map 结构。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#NewConcurrentMap)]
[[play](https://go.dev/play/p/3PenTPETJT0)]
- **ConcurrentMap_Set** : 在 map 中设置 key 和 value。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_Set)]
[[play](https://go.dev/play/p/3PenTPETJT0)]
- **ConcurrentMap_Get** : 根据 key 获取 value, 如果不存在 key,返回零值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_Get)]
[[play](https://go.dev/play/p/3PenTPETJT0)]
- **ConcurrentMap_GetOrSet** : 返回键的现有值(如果存在),否则,设置 key 并返回给定值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_GetOrSet)]
[[play](https://go.dev/play/p/aDcDApOK01a)]
- **ConcurrentMap_Delete** : 删除 key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_Delete)]
[[play](https://go.dev/play/p/uTIJZYhpVMS)]
- **ConcurrentMap_GetAndDelete** :获取 key,然后删除。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_GetAndDelete)]
[[play](https://go.dev/play/p/ZyxeIXSZUiM)]
- **ConcurrentMap_Has** : 验证是否包含 key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_Has)]
[[play](https://go.dev/play/p/C8L4ul9TVwf)]
- **ConcurrentMap_Range** : 为 map 中每个键和值顺序调用迭代器。 如果 iterator 返回 false,则停止迭代。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#ConcurrentMap_Range)]
[[play](https://go.dev/play/p/iqcy7P8P0Pr)]
13. mathutil 包实现了一些数学计算的函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/mathutil"
```
#### 函数列表:
- **Average** :计算平均数,可能需要对结果调用 RoundToFloat 方法四舍五入。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Average)]
[[play](https://go.dev/play/p/Vv7LBwER-pz)]
- **Exponent** : 指数计算(x 的 n 次方)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Exponent)]
[[play](https://go.dev/play/p/uF3HGNPk8wr)]
- **Fibonacci** :计算斐波那契数列的第 n 个数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Fibonacci)]
[[play](https://go.dev/play/p/IscseUNMuUc)]
- **Factorial** : 计算阶乘。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Factorial)]
[[play](https://go.dev/play/p/tt6LdOK67Nx)]
- **Max** : 返回参数中的最大数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Max)]
[[play](https://go.dev/play/p/cN8DHI0rTkH)]
- **MaxBy** : 使用给定的比较器函数返回切片的最大值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#MaxBy)]
[[play](https://go.dev/play/p/pbe2MT-7DV2)]
- **Min** : 返回参数中的最小数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Min)]
[[play](https://go.dev/play/p/21BER_mlGUj)]
- **MinBy** : 使用给定的比较器函数返回切片的最小值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#MinBy)]
[[play](https://go.dev/play/p/N9qgYg_Ho6f)]
- **Percent** : 计算百分比,可以指定保留 n 位小数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Percent)]
[[play](https://go.dev/play/p/s0NdFCtwuyd)]
- **RoundToFloat** : 四舍五入,保留 n 位小数,返回 float64。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#RoundToFloat)]
[[play](https://go.dev/play/p/ghyb528JRJL)]
- **RoundToString** : 四舍五入,保留 n 位小数,返回 string。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#RoundToString)]
[[play](https://go.dev/play/p/kZwpBRAcllO)]
- **TruncRound** : 截短 n 位小数(不进行四舍五入)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#TruncRound)]
[[play](https://go.dev/play/p/aumarSHIGzP)]
- **CeilToFloat** : 向上舍入(进一法),保留n位小数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#CeilToFloat)]
[[play](https://go.dev/play/p/8hOeSADZPCo)]
- **CeilToString** : 向上舍入(进一法),保留n位小数,返回字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#CeilToString)]
[[play](https://go.dev/play/p/wy5bYEyUKKG)]
- **FloorToFloat** : 向下舍入(去尾法),保留n位小数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#FloorToFloat)]
[[play](https://go.dev/play/p/vbCBrQHZEED)]
- **FloorToString** : 向下舍入(去尾法),保留n位小数,返回字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#FloorToString)]
[[play](https://go.dev/play/p/Qk9KPd2IdDb)]
- **Range** : 根据指定的起始值和数量,创建一个数字切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Range)]
[[play](https://go.dev/play/p/9ke2opxa8ZP)]
- **RangeWithStep** : 根据指定的起始值,结束值,步长,创建一个数字切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#RangeWithStep)]
[[play](https://go.dev/play/p/akLWz0EqOSM)]
- **AngleToRadian** : 将角度值转为弧度值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#AngleToRadian)]
[[play](https://go.dev/play/p/CIvlICqrHql)]
- **RadianToAngle** : 将弧度值转为角度值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#RadianToAngle)]
[[play](https://go.dev/play/p/dQtmOTUOMgi)]
- **PointDistance** : 计算两个坐标点的距离。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#PointDistance)]
[[play](https://go.dev/play/p/RrG4JIaziM8)]
- **IsPrime** : 判断质数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#IsPrime)]
[[play](https://go.dev/play/p/Rdd8UTHZJ7u)]
- **GCD** : 求最大公约数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#GCD)]
[[play](https://go.dev/play/p/CiEceLSoAKB)]
- **LCM** : 求最小公倍数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#LCM)]
[[play](https://go.dev/play/p/EjcZxfY7G_g)]
- **Cos** : 计算弧度的余弦值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Cos)]
[[play](https://go.dev/play/p/Sm89LoIfvFq)]
- **Sin** : 计算弧度的正弦值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Sin)]
[[play](https://go.dev/play/p/TWMQlMywDsP)]
- **Log** : 计算以 base 为底 n 的对数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Log)]
[[play](https://go.dev/play/p/_d4bi8oyhat)]
- **Sum** : 求传入参数之和。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Sum)]
[[play](https://go.dev/play/p/1To2ImAMJA7)]
- **Abs** : 求绝对值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Sum)]
[[play](https://go.dev/play/p/fsyBh1Os-1d)]
- **Div** : 除法运算。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Div)]
[[play](https://go.dev/play/p/WLxDdGXXYat)]
14. 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/api/packages/netutil.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/api/packages/netutil.md#EncodeUrl)]
[[play](https://go.dev/play/p/bsZ6BRC4uKI)]
- **GetInternalIp** : 获取内部 ipv4。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#GetInternalIp)]
[[play](https://go.dev/play/p/5mbu-gFp7ei)]
- **GetIps** : 获取系统 ipv4 地址列表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#GetIps)]
[[play](https://go.dev/play/p/NUFfcEmukx1)]
- **GetMacAddrs** : 获取系统 mac 地址列。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.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/api/packages/netutil.md#GetPublicIpInfo)]
[[play](https://go.dev/play/p/YDxIfozsRHR)]
- **GetRequestPublicIp** : 获取 http 请求 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#GetRequestPublicIp)]
[[play](https://go.dev/play/p/kxU-YDc_eBo)]
- **IsPublicIP** : 判断 ip 是否是公共 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsPublicIP)]
[[play](https://go.dev/play/p/nmktSQpJZnn)]
- **IsInternalIP** : 判断 ip 是否是局域网 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsInternalIP)]
[[play](https://go.dev/play/p/sYGhXbgO4Cb)]
- **HttpRequest** : 用于抽象 HTTP 请求实体的结构。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpRequest)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
- **HttpClient** : 用于发送 HTTP 请求。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpClient)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
- **SendRequest** : 发送 http 请求。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#SendRequest)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
- **DecodeResponse** : 解析 http 响应体到目标结构体。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#DecodeResponse)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
- **StructToUrlValues** : 将结构体转为 url values, 仅转化结构体导出字段并且包含`json` tag。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#StructToUrlValues)]
[[play](https://go.dev/play/p/pFqMkM40w9z)]
- **HttpGetdeprecated** : 发送 http get 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpGet)]
- **HttpDeletedeprecated** : 发送 http delete 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpDelete)]
- **HttpPostdeprecated** : 发送 http post 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpPost)]
- **HttpPutdeprecated** : 发送 http put 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpPut)]
- **HttpPatchdeprecated** : 发送 http patch 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#HttpPatch)]
- **ParseHttpResponse** : 解析 http 响应体到目标结构体。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#ParseHttpResponse)]
- **DownloadFile** : 从指定的 server 地址下载文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#DownloadFile)]
- **UploadFile** : 将文件上传指定的 server 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#UploadFile)]
- **IsPingConnected** : 检查能否 ping 通主机。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsPingConnected)]
[[play](https://go.dev/play/p/q8OzTijsA87)]
- **IsTelnetConnected** : 检查能否 telnet 到主机。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsTelnetConnected)]
[[play](https://go.dev/play/p/yiLCGtQv_ZG)]
15. pointer 包支持一些指针类型的操作。 回到目录
```go
import "github.com/duke-git/lancet/v2/pointer"
```
#### 函数列表:
- **ExtractPointer** : 返回传入 interface 的底层值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/pointer.md#ExtractPointer)]
[[play](https://go.dev/play/p/D7HFjeWU2ZP)]
- **Of** : 返回传入参数的指针值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/pointer.md#Of)]
[[play](https://go.dev/play/p/HFd70x4DrMj)]
- **Unwrap** : 返回传入指针指向的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/pointer.md#Unwrap)]
[[play](https://go.dev/play/p/cgeu3g7cjWb)
- **UnwarpOr** : 返回指针的值,如果指针为零值,则返回 fallback。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/pointer.md#UnwrapOr)]
[[play](https://go.dev/play/p/mmNaLC38W8C)]
- **UnwarpOrDefault** : 返回指针的值,如果指针为零值,则返回相应零值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/pointer.md#UnwrapOrDefault)]
[[play](https://go.dev/play/p/ZnGIHf8_o4E)]
16. random 随机数生成器包,可以生成随机[]bytes, int, string。 回到目录
```go
import "github.com/duke-git/lancet/v2/random"
```
#### 函数列表:
- **RandBytes** : 生成随机字节切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandBytes)]
[[play](https://go.dev/play/p/EkiLESeXf8d)]
- **RandInt** : 生成随机 int, 范围[min, max)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandInt)]
[[play](https://go.dev/play/p/pXyyAAI5YxD)]
- **RandString** : 生成给定长度的随机字符串,只包含字母(a-zA-Z)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandString)]
[[play](https://go.dev/play/p/W2xvRUXA7Mi)]
- **RandUpper** : 生成给定长度的随机大写字母字符串(A-Z)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandUpper)]
[[play](https://go.dev/play/p/29QfOh0DVuh)]
- **RandLower** : 生成给定长度的随机小写字母字符串(a-z)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandLower)]
[[play](https://go.dev/play/p/XJtZ471cmtI)]
- **RandNumeral** : 生成给定长度的随机数字字符串(0-9)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandNumeral)]
[[play](https://go.dev/play/p/g4JWVpHsJcf)]
- **RandNumeralOrLetter** : 生成给定长度的随机字符串(数字+字母)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandNumeralOrLetter)]
[[play](https://go.dev/play/p/19CEQvpx2jD)]
- **UUIdV4** : 生成 UUID v4 字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#UUIdV4)]
[[play](https://go.dev/play/p/_Z9SFmr28ft)]
- **RandUniqueIntSlice** : 生成一个不重复的随机int切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandUniqueIntSlice)]
[[play](https://go.dev/play/p/uBkRSOz73Ec)]
- **RandSymbolChar** : 生成给定长度的随机符号字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandSymbolChar)]
[[play](https://go.dev/play/p/Im6ZJxAykOm)]
- **RandFloat** : 生成随机float64数字,可以指定范围和精度。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandFloat)]
[[play](https://go.dev/play/p/zbD_tuobJtr)]
- **RandFloats** : 生成随机float64数字切片,可以指定长度,范围和精度.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandFloats)]
[[play](https://go.dev/play/p/uBkRSOz73Ec)]
17. retry 重试执行函数直到函数运行成功或被 context cancel。 回到目录
```go
import "github.com/duke-git/lancet/v2/retry"
```
#### 函数列表:
- **Context** : 设置重试 context 参数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#Context)]
[[play](https://go.dev/play/p/xnAOOXv9GkS)]
- **Retry** : 重试执行函数 retryFunc,直到函数运行成功,或被 context 取消。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#Retry)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
- **RetryFunc** : 重试执行的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryFunc)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
- **RetryDuration** : 设置重试间隔时间,默认 3 秒。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryDuration)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
- **RetryTimes** : 设置重试次数,默认 5。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryTimes)]
[[play](https://go.dev/play/p/ssfVeU2SwLO)]
- **BackoffStrategy** : 定义计算退避间隔的方法的接口。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#BackoffStrategy)]
- **RetryWithCustomBackoff** : 设置自定义退避策略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryWithCustomBackoff)]
[[play](https://go.dev/play/p/jIm_o2vb5Y4)]
- **RetryWithLinearBackoff** : 设置线性策略退避。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryWithLinearBackoff)]
[[play](https://go.dev/play/p/PDet2ZQZwcB)]
- **RetryWithExponentialWithJitterBackoff** : 设置指数策略退避。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryWithExponentialWithJitterBackoff)]
[[play](https://go.dev/play/p/xp1avQmn16X)]
18. slice 包含操作切片的方法集合。 回到目录
```go
import "github.com/duke-git/lancet/v2/slice"
```
#### 函数列表:
- **AppendIfAbsent** : 当前切片中不包含值时,将该值追加到切片中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#AppendIfAbsent)]
[[play](https://go.dev/play/p/GNdv7Jg2Taj)]
- **Contain** : 判断 slice 是否包含 value。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Contain)]
[[play](https://go.dev/play/p/_454yEHcNjf)]
- **ContainBy** : 根据 predicate 函数判断切片是否包含某个值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ContainBy)]
[[play](https://go.dev/play/p/49tkHfX4GNc)]
- **ContainSubSlice** : 判断 slice 是否包含 subslice。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ContainSubSlice)]
[[play](https://go.dev/play/p/bcuQ3UT6Sev)]
- **Chunk** : 按照 size 参数均分 slice。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.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/api/packages/slice.md#Compact)]
[[play](https://go.dev/play/p/pO5AnxEr3TK)]
- **Concat** : 合并多个 slices 到一个 slice 中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Concat)]
[[play](https://go.dev/play/p/gPt-q7zr5mk)]
- **Count** : 返回切片中指定元素的个数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Count)]
[[play](https://go.dev/play/p/Mj4oiEnQvRJ)]
- **CountBy** : 遍历切片,对每个元素执行函数 predicate. 返回符合函数返回值为 true 的元素的个数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#CountBy)]
[[play](https://go.dev/play/p/tHOccTMDZCC)]
- **Difference** : 创建一个切片,其元素不包含在另一个给定切片中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Difference)]
[[play](https://go.dev/play/p/VXvadzLzhDa)]
- **DifferenceBy** : 将两个 slice 中的每个元素调用 iteratee 函数,并比较它们的返回值,如果不相等返回在 slice 中对应的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DifferenceBy)]
[[play](https://go.dev/play/p/DiivgwM5OnC)]
- **DifferenceWith** : 接受比较器函数,该比较器被调用以将切片的元素与值进行比较。 结果值的顺序和引用由第一个切片确定。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DifferenceWith)]
[[play](https://go.dev/play/p/v2U2deugKuV)]
- **DeleteAt** : 删除切片中指定索引到的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DeleteAt)]
[[play](https://go.dev/play/p/800B1dPBYyd)]
- **DeleteRange** : 删除切片中指定开始索引到结束索引的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DeleteRange)]
[[play](https://go.dev/play/p/945HwiNrnle)]
- **Drop** : 从切片头部删除 n 个元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Drop)]
[[play](https://go.dev/play/p/jnPO2yQsT8H)]
- **DropRight** : 从切片尾部删除 n 个元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DropRight)]
[[play](https://go.dev/play/p/8bcXvywZezG)]
- **DropWhile** : 从切片的头部删除 n 个元素,这个 n 个元素满足 predicate 函数返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DropWhile)]
[[play](https://go.dev/play/p/4rt252UV_qs)]
- **DropRightWhile** : 从切片的尾部删除 n 个元素,这个 n 个元素满足 predicate 函数返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#DropRightWhile)]
[[play](https://go.dev/play/p/6wyK3zMY56e)]
- **Equal** : 检查两个切片是否相等,相等条件:切片长度相同,元素顺序和值都相同。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Equal)]
[[play](https://go.dev/play/p/WcRQJ37ifPa)]
- **EqualWith** : 检查两个切片是否相等,相等条件:对两个切片的元素调用比较函数 comparator,返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#EqualWith)]
[[play](https://go.dev/play/p/b9iygtgsHI1)]
- **Every** : 如果切片中的所有值都通过谓词函数,则返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Every)]
[[play](https://go.dev/play/p/R8U6Sl-j8cD)]
- **Filter** : 返回切片中通过 predicate 函数真值测试的所有元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Filter)]
[[play](https://go.dev/play/p/SdPna-7qK4T)]
- **FilterMap** : 返回一个将 filter 和 map 操作应用于给定切片的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FilterMap)]
[[play](https://go.dev/play/p/J94SZ_9MiIe)]
- **Finddeprecated** : 遍历切片的元素,返回第一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Find)]
[[play](https://go.dev/play/p/CBKeBoHVLgq)]
- **FindBy** : 遍历切片的元素,返回第一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FindBy)]
[[play](https://go.dev/play/p/n1lysBYl-GB)]
- **FindLastdeprecated** : 从头到尾遍历 slice 的元素,返回最后一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FindLast)]
[[play](https://go.dev/play/p/FFDPV_j7URd)]
- **FindLastBy** : 从遍历 slice 的元素,返回最后一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FindLastBy)]
[[play](https://go.dev/play/p/8iqomzyCl_s)]
- **Flatten** : 将多维切片展平一层。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Flatten)]
[[play](https://go.dev/play/p/hYa3cBEevtm)]
- **FlattenDeep** : 将多维切片递归展平到一层。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FlattenDeep)]
[[play](https://go.dev/play/p/yjYNHPyCFaF)]
- **FlatMap** : 将切片转换为其它类型切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#FlatMap)]
[[play](https://go.dev/play/p/_QARWlWs1N_F)]
- **ForEach** : 遍历切片的元素并为每个元素调用 iteratee 函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ForEach)]
[[play](https://go.dev/play/p/DrPaa4YsHRF)]
- **ForEachWithBreak** : 遍历切片的元素并为每个元素调用 iteratee 函数,当 iteratee 函数返回 false 时,终止遍历。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ForEachWithBreak)]
[[play](https://go.dev/play/p/qScs39f3D9W)]
- **GroupBy** : 迭代切片的元素,每个元素将按条件分组,返回两个切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#GroupBy)]
[[play](https://go.dev/play/p/QVkPxzPR0iA)]
- **GroupWith** : 创建一个 map,key 是 iteratee 遍历 slice 中的每个元素返回的结果。值是切片元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#GroupWith)]
[[play](https://go.dev/play/p/ApCvMNTLO8a)]
- **IntSlicedeprecated** : 将接口切片转换为 int 切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IntSlice)]
[[play](https://go.dev/play/p/FdQXF0Vvqs-)]
- **InterfaceSlicedeprecated** : 将值转换为 interface 切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#InterfaceSlice)]
[[play](https://go.dev/play/p/FdQXF0Vvqs-)]
- **Intersection** : 返回多个切片的交集。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Intersection)]
[[play](https://go.dev/play/p/anJXfB5wq_t)]
- **InsertAt** : 将元素插入到索引处的切片中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#InsertAt)]
[[play](https://go.dev/play/p/hMLNxPEGJVE)]
- **IndexOf** : 返回在切片中找到值的第一个匹配项的索引,如果找不到值,则返回-1。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IndexOf)]
[[play](https://go.dev/play/p/MRN1f0FpABb)]
- **LastIndexOf** : 返回在切片中找到最后一个值的索引,如果找不到该值,则返回-1。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#LastIndexOf)]
[[play](https://go.dev/play/p/DokM4cf1IKH)]
- **Map** : 对 slice 中的每个元素执行 map 函数以创建一个新切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Map)]
[[play](https://go.dev/play/p/biaTefqPquw)]
- **Merge** : 合并多个切片(不会消除重复元素)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Merge)]
[[play](https://go.dev/play/p/lbjFp784r9N)]
- **Reverse** : 反转切片中的元素顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Reverse)]
[[play](https://go.dev/play/p/8uI8f1lwNrQ)]
- **Reducedeprecated** : 将切片中的元素依次运行 iteratee 函数,返回运行结果。(废弃:建议使用 ReduceBy)
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Reduce)]
[[play](https://go.dev/play/p/_RfXJJWIsIm)]
- **ReduceBy** : 对切片元素执行 reduce 操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ReduceBy)]
[[play](https://go.dev/play/p/YKDpLi7gtee)]
- **ReduceRight** : 类似 ReduceBy 操作,迭代切片元素顺序从右至左。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ReduceRight)]
[[play](https://go.dev/play/p/qT9dZC03A1K)]
- **Replace** : 返回切片的副本,其中前 n 个不重叠的 old 替换为 new。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Replace)]
[[play](https://go.dev/play/p/P5mZp7IhOFo)]
- **ReplaceAll** : 返回切片的副本,将其中 old 全部替换为 new。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ReplaceAll)]
[[play](https://go.dev/play/p/CzqXMsuYUrx)]
- **Repeat** : 创建一个切片,包含 n 个传入的 item。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Repeat)]
[[play](https://go.dev/play/p/1CbOmtgILUU)]
- **Shuffle** : 随机打乱切片中的元素顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Shuffle)]
[[play](https://go.dev/play/p/YHvhnWGU3Ge)]
- **IsAscending** : 检查切片元素是否按升序排列。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IsAscending)]
[[play](https://go.dev/play/p/9CtsFjet4SH)]
- **IsDescending** : 检查切片元素是否按降序排列。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IsDescending)]
[[play](https://go.dev/play/p/U_LljFXma14)]
- **IsSorted** : 检查切片元素是否是有序的(升序或降序)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IsSorted)]
[[play](https://go.dev/play/p/nCE8wPLwSA-)]
- **IsSortedByKey** : 通过 iteratee 函数,检查切片元素是否是有序的。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#IsSortedByKey)]
[[play](https://go.dev/play/p/tUoGB7DOHI4)]
- **Sort** : 对任何有序类型(数字或字符串)的切片进行排序,使用快速排序算法。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Sort)]
[[play](https://go.dev/play/p/V9AVjzf_4Fk)]
- **SortBy** : 按照 less 函数确定的升序规则对切片进行排序。排序不保证稳定性。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.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/api/packages/slice.md#SortByField)]
[[play](https://go.dev/play/p/fU1prOBP9p1)]
- **Some** : 如果列表中的任何值通过谓词函数,则返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Some)]
[[play](https://go.dev/play/p/4pO9Xf9NDGS)]
- **StringSlicedeprecated** : 将接口切片转换为字符串切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#StringSlice)]
[[play](https://go.dev/play/p/W0TZDWCPFcI)]
- **SymmetricDifference** : 返回一个切片,其中的元素存在于参数切片中,但不同时存储在于参数切片中(交集取反)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#h42nJX5xMln)]
[[play](https://go.dev/play/p/1CbOmtgILUU)]
- **ToSlice** : 将可变参数转为切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ToSlice)]
[[play](https://go.dev/play/p/YzbzVq5kscN)]
- **ToSlicePointer** : 将可变参数转为指针切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ToSlicePointer)]
[[play](https://go.dev/play/p/gx4tr6_VXSF)]
- **Unique** : 删除切片中的重复元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Unique)]
[[play](https://go.dev/play/p/AXw0R3ZTE6a)]
- **UniqueBy** : 根据迭代函数返回的值,从输入切片中移除重复元素。此函数保持元素的顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UniqueBy)]
[[play](https://go.dev/play/p/UR323iZLDpv)]
- **UniqueByComparator** : 使用提供的比较器函数从输入切片中移除重复元素。此函数保持元素的顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UniqueByComparator)]
- **UniqueByField** : 根据struct字段对struct切片去重复。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UniqueByField)]
[[play](https://go.dev/play/p/6cifcZSPIGu)]
- **UniqueByParallel** : 并发的从输入切片中移除重复元素,结果保持元素的顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UniqueByParallel)]
- **Union** : 合并多个切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Union)]
[[play](https://go.dev/play/p/hfXV1iRIZOf)]
- **UnionBy** : 对切片的每个元素调用函数后,合并多个切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UnionBy)]
[[play](https://go.dev/play/p/HGKHfxKQsFi)]
- **UpdateAt** : 更新索引处的切片元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#UpdateAt)]
[[play](https://go.dev/play/p/f3mh2KloWVm)]
- **Without** : 创建一个不包括所有给定值的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Without)]
[[play](https://go.dev/play/p/bwhEXEypThg)]
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#KeyBy)]
[[play](https://go.dev/play/p/uXod2LWD1Kg)]
- **Join** : 用指定的分隔符链接切片元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Join)]
[[play](https://go.dev/play/p/huKzqwNDD7V)]
- **Partition** : 根据给定的predicate判断函数分组切片元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Partition)]
[[play](https://go.dev/play/p/lkQ3Ri2NQhV)]
- **Random** : 随机返回切片中元素以及下标, 当切片长度为0时返回下标-1。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Random)]
[[play](https://go.dev/play/p/UzpGQptWppw)]
- **SetToDefaultIf** : 根据给定给定的predicate判定函数来修改切片中的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#SetToDefaultIf)]
[[play](https://go.dev/play/p/9AXGlPRC0-A)]
- **Break** : 根据判断函数将切片分成两部分。它开始附加到与函数匹配的第一个元素之后的第二个切片。第一个匹配之后的所有元素都包含在第二个切片中,无论它们是否与函数匹配。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Break)]
- **RightPadding** : 在切片的右部添加元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#RightPadding)]
[[play](https://go.dev/play/p/0_2rlLEMBXL)]
- **LeftPadding** : 在切片的左部添加元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#LeftPadding)]
[[play](https://go.dev/play/p/jlQVoelLl2k)]
19. stream 流,该包仅验证简单的 stream 实现,功能有限。 回到目录
```go
import "github.com/duke-git/lancet/v2/stream"
```
#### 函数列表:
- **Of** : 创建元素为指定值的 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Of)]
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
- **FromSlice** : 从切片创建 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#FromSlice)]
[[play](https://go.dev/play/p/wywTO0XZtI4)]
- **FromChannel** : 从通道创建 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#FromChannel)]
[[play](https://go.dev/play/p/9TZYugGMhXZ)]
- **FromRange** : 指定一个数字范围创建 stream, 范围两端点值都包括在内。. [start, end]
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#FromRange)]
[[play](https://go.dev/play/p/9Ex1-zcg-B-)]
- **Generate** : 创建一个 stream,其中每个元素都由提供的生成器函数生成。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Generate)]
[[play](https://go.dev/play/p/rkOWL1yA3j9)]
- **Concat** : 创建一个延迟连接 stream,其元素是第一个 stream 的所有元素,后跟第二个 stream 的全部元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Concat)]
[[play](https://go.dev/play/p/HM4OlYk_OUC)]
- **Distinct** : 创建并返回一个 stream,用于删除重复的项。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Distinct)]
[[play](https://go.dev/play/p/eGkOSrm64cB)]
- **Filter** : 返回一个通过判定函数的 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Filter)]
[[play](https://go.dev/play/p/MFlSANo-buc)]
- **Map** : 返回一个 stream,该 stream 由将给定函数应用于源 stream 元素的元素组成。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Map)]
[[play](https://go.dev/play/p/OtNQUImdYko)]
- **Peek** : 返回一个由源 stream 的元素组成的 stream,并在从生成的 stream 中消耗元素时对每个元素执行所提供的操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Peek)]
[[play](https://go.dev/play/p/u1VNzHs6cb2)]
- **Skip** : 在丢弃 stream 的前 n 个元素后,返回由源 stream 的其余元素组成的 stream。如果此 stream 包含的元素少于 n 个,则将返回一个空 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Skip)]
[[play](https://go.dev/play/p/fNdHbqjahum)]
- **Limit** : 返回由源 stream 的元素组成的 stream,该 stream 被截断为长度不超过 maxSize。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Limit)]
[[play](https://go.dev/play/p/qsO4aniDcGf)]
- **Reverse** : 返回元素与源 stream 的顺序相反的 stream。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Reverse)]
[[play](https://go.dev/play/p/A8_zkJnLHm4)]
- **Range** : 返回一个 stream,该 stream 的元素在从源 stream 的开始(包含)到结束(排除)的范围内。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Range)]
[[play](https://go.dev/play/p/indZY5V2f4j)]
- **Sorted** : 返回一个 stream,该 stream 由源 stream 的元素组成,并根据提供的 less 函数进行排序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Sorted)]
[[play](https://go.dev/play/p/XXtng5uonFj)]
- **ForEach** : 对 stream 的每个元素执行一个操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#ForEach)]
[[play](https://go.dev/play/p/Dsm0fPqcidk)]
- **Reduce** : 使用关联累加函数对 stream 的元素执行 reduce 操作,并 reduce 操作结果(如果有)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Reduce)]
[[play](https://go.dev/play/p/6uzZjq_DJLU)]
- **FindFirst** : 返回此 stream 的第一个元素,如果 stream 为空,则返回零值和 false。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#FindFirst)]
[[play](https://go.dev/play/p/9xEf0-6C1e3)]
- **FindLast** : 返回此 stream 的最后一个元素,如果 stream 为空,则返回零值和 false。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#FindLast)]
[[play](https://go.dev/play/p/WZD2rDAW-2h)]
- **Max** : 根据提供的 less 函数返回 stream 的最大元素。less 函数: a > b
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Max)]
[[play](https://go.dev/play/p/fm-1KOPtGzn)]
- **Min** : 根据提供的 less 函数返回 stream 的最小元素。less 函数: a < b
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Min)]
[[play](https://go.dev/play/p/vZfIDgGNRe_0)]
- **AllMatch** : 判断 stream 的所有元素是否全部匹配指定判定函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#AllMatch)]
[[play](https://go.dev/play/p/V5TBpVRs-Cx)]
- **AnyMatch** : 判断 stream 是否包含匹配指定判定函数的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#AnyMatch)]
[[play](https://go.dev/play/p/PTCnWn4OxSn)]
- **NoneMatch** : 判断 stream 的元素是否全部不匹配指定的判定函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#NoneMatch)]
[[play](https://go.dev/play/p/iWS64pL1oo3)]
- **Count** : 返回 stream 中元素的数量。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#Count)]
[[play](https://go.dev/play/p/r3koY6y_Xo-)]
- **ToSlice** : 返回 stream 中的元素切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#ToSlice)]
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
20. structs 提供操作 struct, tag, field 的相关函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/structs"
```
#### 函数列表:
- **New** : `Struct`结构体的构造函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#New)]
- **ToMap** : 将一个合法的 struct 对象转换为 map[string]any。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#ToMap)]
- **Fields** : 获取一个 struct 对象的属性列表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Fields)]
- **Field** : 根据属性名获取一个 struct 对象的属性。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Fields)]
- **IsStruct** : 判断是否为一个合法的 struct 对象。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsStruct)]
- **Tag** : 获取`Field`的`Tag`,默认的 tag key 是 json。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Tag)]
- **Name** : 获取属性名。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Name)]
- **Value** : 获取`Field`属性的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Value)]
- **Kind** : 获取属性 Kind。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#Kind)]
- **IsEmbedded** : 判断属性是否为嵌入。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsEmbedded)]
- **IsExported** : 判断属性是否导出。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsExported)]
- **IsZero** : 判断属性是否为零值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsZero)]
- **IsSlice** : 判断属性是否是切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsSlice)]
- **IsTargetType** : 判断属性是否是目标类型。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/struct.md#IsTargetType)]
21. strutil 包含字符串处理的相关函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/strutil"
```
#### 函数列表:
- **After** : 返回源字符串中指定字符串首次出现时的位置之后的子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#After)]
[[play](https://go.dev/play/p/RbCOQqCDA7m)]
- **AfterLast** : 返回源字符串中指定字符串最后一次出现时的位置之后的子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#AfterLast)]
[[play](https://go.dev/play/p/1TegARrb8Yn)]
- **Before** : 返回源字符串中指定字符串第一次出现时的位置之前的子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Before)]
[[play](https://go.dev/play/p/JAWTZDS4F5w)]
- **BeforeLast** : 返回源字符串中指定字符串最后一次出现时的位置之前的子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#BeforeLast)]
[[play](https://go.dev/play/p/pJfXXAoG_Te)]
- **CamelCase** : 将字符串转换为 CamelCase 驼峰式字符串, 非字母和数字会被忽略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#CamelCase)]
[[play](https://go.dev/play/p/9eXP3tn2tUy)]
- **Capitalize** : 将字符串的第一个字符转换为大写。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Capitalize)]
[[play](https://go.dev/play/p/2OAjgbmAqHZ)]
- **ContainsAll** : 判断字符串是否包括全部给定的子字符串切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#ContainsAll)]
[[play](https://go.dev/play/p/KECtK2Os4zq)]
- **ContainsAny** : 判断字符串是否包括给定的子字符串切片中任意一个子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#ContainsAny)]
[[play](https://go.dev/play/p/dZGSSMB3LXE)]
- **IsString** : 判断传入参数的数据类型是否为字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#IsString)]
[[play](https://go.dev/play/p/IOgq7oF9ERm)]
- **KebabCase** : 将字符串转换为 kebab-case 形式字符串, 非字母和数字会被忽略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#KebabCase)]
[[play](https://go.dev/play/p/dcZM9Oahw-Y)]
- **UpperKebabCase** : 将字符串转换为大写 KEBAB-CASE 形式字符串, 非字母和数字会被忽略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#UpperKebabCase)]
[[play](https://go.dev/play/p/zDyKNneyQXk)]
- **LowerFirst** : 将字符串的第一个字符转换为小写形式。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#LowerFirst)]
[[play](https://go.dev/play/p/CbzAyZmtJwL)]
- **UpperFirst** : 将字符串的第一个字符转换为大写形式。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#UpperFirst)]
[[play](https://go.dev/play/p/sBbBxRbs8MM)]
- **Pad** : 如果字符串长度短于 size,则在左右两侧填充字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Pad)]
[[play](https://go.dev/play/p/NzImQq-VF8q)]
- **PadEnd** : 如果字符串短于限制大小,则在右侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#PadEnd)]
[[play](https://go.dev/play/p/9xP8rN0vz--)]
- **PadStart** : 如果字符串短于限制大小,则在左侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#PadStart)]
[[play](https://go.dev/play/p/xpTfzArDfvT)]
- **Reverse** : 返回字符顺序与给定字符串相反的字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Reverse)]
[[play](https://go.dev/play/p/adfwalJiecD)]
- **SnakeCase** : 将字符串转换为 snake_case 形式, 非字母和数字会被忽略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#SnakeCase)]
[[play](https://go.dev/play/p/tgzQG11qBuN)]
- **UpperSnakeCase** : 将字符串转换为大写 SNAKE_CASE 形式, 非字母和数字会被忽略。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#UpperSnakeCase)]
[[play](https://go.dev/play/p/4COPHpnLx38)]
- **SplitEx** : 拆分给定的字符串可以控制结果切片是否包含空字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#SplitEx)]
[[play](https://go.dev/play/p/Us-ySSbWh-3)]
- **Substring** : 根据指定的位置和长度截取子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Substring)]
[[play](https://go.dev/play/p/q3sM6ehnPDp)]
- **Wrap** : 用给定字符包裹传入的字符串
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Wrap)]
[[play](https://go.dev/play/p/KoZOlZDDt9y)]
- **Unwrap** : 从另一个字符串中解开一个给定的字符串。 将更改源字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Unwrap)]
[[play](https://go.dev/play/p/Ec2q4BzCpG-)]
- **SplitWords** : 将字符串拆分为单词,只支持字母字符单词。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#SplitWords)]
[[play](https://go.dev/play/p/KLiX4WiysMM)]
- **WordCount** : 返回有意义单词的数量,只支持字母字符单词。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#WordCount)]
[[play](https://go.dev/play/p/bj7_odx3vRf)]
- **RemoveNonPrintable** : 删除字符串中不可打印的字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#RemoveNonPrintable)]
[[play](https://go.dev/play/p/og47F5x_jTZ)]
- **StringToBytes** : 在不分配内存的情况下将字符串转换为字节片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#StringToBytes)]
[[play](https://go.dev/play/p/7OyFBrf9AxA)]
- **BytesToString** : 在不分配内存的情况下将字节切片转换为字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#BytesToString)]
[[play](https://go.dev/play/p/6c68HRvJecH)]
- **IsBlank** : 检查字符串是否为空格或空。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#IsBlank)]
[[play](https://go.dev/play/p/6zXRH_c0Qd3)]
- **IsNotBlank** : 检查字符串是否不为空。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#IsNotBlank)]
[[play](https://go.dev/play/p/e_oJW0RAquA)]
- **HasPrefixAny** : 检查字符串是否以指定字符串数组中的任何一个开头。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#HasPrefixAny)]
[[play](https://go.dev/play/p/8UUTl2C5slo)]
- **HasSuffixAny** : 检查字符串是否以指定字符串数组中的任何一个结尾。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#HasSuffixAny)]
[[play](https://go.dev/play/p/sKWpCQdOVkx)]
- **IndexOffset** : 将字符串偏移 idxFrom 后,返回字符串中第一个 substr 实例的索引。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#IndexOffset)]
[[play](https://go.dev/play/p/qZo4lV2fomB)]
- **ReplaceWithMap** : 返回 string 的副本,以无序的方式被 map 替换,区分大小写。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#ReplaceWithMap)]
[[play](https://go.dev/play/p/h3t7CNj2Vvu)]
- **Trim** : 从字符串的开头和结尾去除空格(或其他字符)。 可选参数 characterMask 指定额外的剥离字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#Trim)]
[[play](https://go.dev/play/p/Y0ilP0NRV3j)]
- **SplitAndTrim** : 将字符串 str 按字符串 delimiter 拆分为一个切片,并对该数组的每个元素调用 Trim。忽略 Trim 后为空的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#SplitAndTrim)]
[[play](https://go.dev/play/p/ZNL6o4SkYQ7)]
- **HideString** : 隐藏源字符串中的一些字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#HideString)]
[[play](https://go.dev/play/p/pzbaIVCTreZ)]
- **RemoveWhiteSpace** : 删除字符串中的空格。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#RemoveWhiteSpace)]
[[play](https://go.dev/play/p/HzLC9vsTwkf)]
- **SubInBetween** : 获取字符串中指定的起始字符串start和终止字符串end直接的子字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#SubInBetween)]
[[play](https://go.dev/play/p/EDbaRvjeNsv)]
- **HammingDistance** : 计算两个字符串之间的汉明距离。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#HammingDistance)]
[[play](https://go.dev/play/p/glNdQEA9HUi)]
22. 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/api/packages/system#IsWindows)]
[[play](https://go.dev/play/p/XzJULbzmf9m)]
- **IsLinux** : 检查当前操作系统是否是 linux。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#IsLinux)]
[[play](https://go.dev/play/p/zIflQgZNuxD)]
- **IsMac** : 检查当前操作系统是否是 macos。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#IsMac)]
[[play](https://go.dev/play/p/Mg4Hjtyq7Zc)]
- **GetOsEnv** : 根据 key 获取对应的环境变量值
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#GetOsEnv)]
[[play](https://go.dev/play/p/D88OYVCyjO-)]
- **SetOsEnv** : 设置环境变量。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#SetOsEnv)]
[[play](https://go.dev/play/p/D88OYVCyjO-)]
- **RemoveOsEnv** : 删除环境变量。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#RemoveOsEnv)]
[[play](https://go.dev/play/p/fqyq4b3xUFQ)]
- **CompareOsEnv** : 换取环境变量并与传入值进行比较。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#CompareOsEnv)]
[[play](https://go.dev/play/p/BciHrKYOHbp)]
- **ExecCommand** : 执行 shell 命令。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#ExecCommand)]
[[play](https://go.dev/play/p/n-2fLyZef-4)]
- **GetOsBits** : 获取当前操作系统位数(32/64)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system#GetOsBits)]
[[play](https://go.dev/play/p/ml-_XH3gJbW)]
23. Tuple 包实现一个元组数据类型。 回到目录
```go
import "github.com/duke-git/lancet/v2/tuple"
```
#### 函数列表:
- **Tuple2** : 2 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple2)]
[[play](https://go.dev/play/p/3sHVqBQpLYN)]
- **Tuple2_Unbox** : 返回 2 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple2_Unbox)]
[[play](https://go.dev/play/p/0fD1qfCVwjm)]
- **Zip2** : 创建一个 Tuple2 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip2)]
[[play](https://go.dev/play/p/4ncWJJ77Xio)]
- **Unzip2** : 根据传入的 Tuple2 切片,创建一组和 Tuple2 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip2)]
[[play](https://go.dev/play/p/KBecr60feXb)]
- **Tuple3** : 3 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple3)]
[[play](https://go.dev/play/p/FtH2sdCLlCf)]
- **Tuple3_Unbox** : 返回 3 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple3_Unbox)]
[[play](https://go.dev/play/p/YojLy-id1BS)]
- **Zip3** : 创建一个 Tuple3 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip3)]
[[play](https://go.dev/play/p/97NgmsTILfu)]
- **Unzip3** : 根据传入的 Tuple3 切片,创建一组和 Tuple3 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip3)]
[[play](https://go.dev/play/p/bba4cpAa7KO)]
- **Tuple4** : 4 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple4)]
[[play](https://go.dev/play/p/D2EqDz096tk)]
- **Tuple4_Unbox** : 返回 4 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple4_Unbox)]
[[play](https://go.dev/play/p/ACj9YuACGgW)]
- **Zip4** : 创建一个 Tuple4 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip4)]
[[play](https://go.dev/play/p/PEmTYVK5hL4)]
- **Unzip4** : 根据传入的 Tuple4 切片,创建一组和 Tuple4 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip4)]
[[play](https://go.dev/play/p/rb8z4gyYSRN)]
- **Tuple5** : 5 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple5)]
[[play](https://go.dev/play/p/2WndmVxPg-r)]
- **Tuple5_Unbox** : 返回 5 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple5_Unbox)]
[[play](https://go.dev/play/p/GyIyZHjCvoS)]
- **Zip5** : 创建一个 Tuple5 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip5)]
[[play](https://go.dev/play/p/fCAAJLMfBIP)]
- **Unzip5** : 根据传入的 Tuple5 切片,创建一组和 Tuple5 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip5)]
[[play](https://go.dev/play/p/gyl6vKfhqPb)]
- **Tuple6** : 6 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple6)]
[[play](https://go.dev/play/p/VjqcCwEJZbs)]
- **Tuple6_Unbox** : 返回 6 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple6_Unbox)]
[[play](https://go.dev/play/p/FjIHV7lpxmW)]
- **Zip6** : 创建一个 Tuple6 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip6)]
[[play](https://go.dev/play/p/oWPrnUYuFHo)]
- **Unzip6** : 根据传入的 Tuple6 切片,创建一组和 Tuple6 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip6)]
[[play](https://go.dev/play/p/l41XFqCyh5E)]
- **Tuple7** : 7 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple7)]
[[play](https://go.dev/play/p/dzAgv_Ezub9)]
- **Tuple7_Unbox** : 返回 7 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple7_Unbox)]
[[play](https://go.dev/play/p/R9I8qeDk0zs)]
- **Zip7** : 创建一个 Tuple7 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip7)]
[[play](https://go.dev/play/p/WUJuo897Egf)]
- **Unzip7** : 根据传入的 Tuple7 切片,创建一组和 Tuple7 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip7)]
[[play](https://go.dev/play/p/hws_P1Fr2j3)]
- **Tuple8** : 8 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple8)]
[[play](https://go.dev/play/p/YA9S0rz3dRz)]
- **Tuple8_Unbox** : 返回 8 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple8_Unbox)]
[[play](https://go.dev/play/p/PRxLBBb4SMl)]
- **Zip8** : 创建一个 Tuple8 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip8)]
[[play](https://go.dev/play/p/8V9jWkuJfaQ)]
- **Unzip8** : 根据传入的 Tuple8 切片,创建一组和 Tuple8 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip8)]
[[play](https://go.dev/play/p/1SndOwGsZB4)]
- **Tuple9** : 9 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple9)]
[[play](https://go.dev/play/p/yS2NGGtZpQr)]
- **Tuple9_Unbox** : 返回 9 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple9_Unbox)]
[[play](https://go.dev/play/p/oFJFGTAuOa8)]
- **Zip9** : 创建一个 Tuple9 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip9)]
[[play](https://go.dev/play/p/cgsL15QYnfz)]
- **Unzip9** : 根据传入的 Tuple9 切片,创建一组和 Tuple9 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip9)]
[[play](https://go.dev/play/p/91-BU_KURSA)]
- **Tuple10** : 10 元元组
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple10)]
[[play](https://go.dev/play/p/799qqZg0hUv)]
- **Tuple10_Unbox** : 返回 10 元元组的字段值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Tuple10_Unbox)]
[[play](https://go.dev/play/p/qfyx3x_X0Cu)]
- **Zip10** : 创建一个 Tuple10 元组切片, 其中元组的元素和传入切片元素相对应。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Zip10)]
[[play](https://go.dev/play/p/YSR-2cXnrY4)]
- **Unzip10** : 根据传入的 Tuple10 切片,创建一组和 Tuple10 元素相对应的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/tuple.md#Unzip10)]
[[play](https://go.dev/play/p/-taQB6Wfre_z)]
24. validator 验证器包,包含常用字符串格式验证函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/validator"
```
#### 函数列表:
- **ContainChinese** : 验证字符串是否包含中文字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#ContainChinese)]
[[play](https://go.dev/play/p/7DpU0uElYeM)]
- **ContainLetter** : 验证字符串是否包含至少一个英文字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#ContainLetter)]
[[play](https://go.dev/play/p/lqFD04Yyewp)]
- **ContainLower** : 验证字符串是否包含至少一个英文小写字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#ContainLower)]
[[play](https://go.dev/play/p/Srqi1ItvnAA)]
- **ContainUpper** : 验证字符串是否包含至少一个英文大写字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#ContainUpper)]
[[play](https://go.dev/play/p/CmWeBEk27-z)]
- **IsAlpha** : 验证字符串是否只包含英文字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsAlpha)]
[[play](https://go.dev/play/p/7Q5sGOz2izQ)]
- **IsAllUpper** : 验证字符串是否全是大写英文字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsAllUpper)]
[[play](https://go.dev/play/p/ZHctgeK1n4Z)]
- **IsAllLower** : 验证字符串是否全是小写英文字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsAllLower)]
[[play](https://go.dev/play/p/GjqCnOfV6cM)]
- **IsBase64** : 验证字符串是否是 base64 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsBase64)]
[[play](https://go.dev/play/p/sWHEySAt6hl)]
- **IsChineseMobile** : 验证字符串是否是中国手机号码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsChineseMobile)]
[[play](https://go.dev/play/p/GPYUlGTOqe3)]
- **IsChineseIdNum** : 验证字符串是否是中国身份证号码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.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/api/packages/validator.md#IsChinesePhone)]
[[play](https://go.dev/play/p/RUD_-7YZJ3I)]
- **IsCreditCard** : 验证字符串是否是信用卡号码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsCreditCard)]
[[play](https://go.dev/play/p/sNwwL6B0-v4)]
- **IsDns** : 验证字符串是否是有效 dns。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsDns)]
[[play](https://go.dev/play/p/jlYApVLLGTZ)]
- **IsEmail** : 验证字符串是否是有效电子邮件地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsEmail)]
[[play](https://go.dev/play/p/Os9VaFlT33G)]
- **IsEmptyString** : 验证字符串是否是空字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsEmptyString)]
[[play](https://go.dev/play/p/dpzgUjFnBCX)]
- **IsFloat** : 验证参数是否是浮点数((float32,float34)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsFloat)]
[[play](https://go.dev/play/p/vsyG-sxr99_Z)]
- **IsFloatStr** : 验证字符串是否是可以转换为浮点数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsFloatStr)]
[[play](https://go.dev/play/p/LOYwS_Oyl7U)]
- **IsNumber** : 验证参数是否是数字(integer,float)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsNumber)]
[[play](https://go.dev/play/p/mdJHOAvtsvF)]
- **IsNumberStr** : 验证字符串是否是可以转换为数字。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsNumberStr)]
[[play](https://go.dev/play/p/LzaKocSV79u)]
- **IsJSON** : 验证字符串是否是有效 json。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsJSON)]
[[play](https://go.dev/play/p/8Kip1Itjiil)]
- **IsRegexMatch** : 验证字符串是否可以匹配正则表达式。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsRegexMatch)]
[[play](https://go.dev/play/p/z_XeZo_litG)]
- **IsInt** : 验证参数是否是整数(int, unit)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsInt)]
[[play](https://go.dev/play/p/eFoIHbgzl-z)]
- **IsIntStr** : 验证字符串是否是可以转换为整数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsIntStr)]
[[play](https://go.dev/play/p/jQRtFv-a0Rk)]
- **IsIp** : 验证字符串是否是 ip 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsIp)]
[[play](https://go.dev/play/p/FgcplDvmxoD)]
- **IsIpV4** : 验证字符串是否是 ipv4 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsIpV4)]
[[play](https://go.dev/play/p/zBGT99EjaIu)]
- **IsIpV6** : 验证字符串是否是 ipv6 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsIpV6)]
[[play](https://go.dev/play/p/AHA0r0AzIdC)]
- **IsStrongPassword** : 验证字符串是否是强密码:(字母+数字+特殊字符)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsStrongPassword)]
[[play](https://go.dev/play/p/QHdVcSQ3uDg)]
- **IsUrl** : 验证字符串是否是 url。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsUrl)]
[[play](https://go.dev/play/p/pbJGa7F98Ka)]
- **IsWeakPassword** : 验证字符串是否是弱密码(只包含字母+数字)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsWeakPassword)]
[[play](https://go.dev/play/p/wqakscZH5gH)]
- **IsZeroValue** : 判断传入的参数值是否为零值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsZeroValue)]
[[play](https://go.dev/play/p/UMrwaDCi_t4)]
- **IsGBK** : 检查数据编码是否为 gbk(汉字内部代码扩展规范)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsGBK)]
[[play](https://go.dev/play/p/E2nt3unlmzP)]
- **IsASCII** : 验证字符串全部为 ASCII 字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsASCII)]
[[play](https://go.dev/play/p/hfQNPLX0jNa)]
- **IsPrintable** : 检查字符串是否全部为可打印字符。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsPrintable)]
[[play](https://go.dev/play/p/Pe1FE2gdtTP)]
- **IsBin** : 检查字符串是否是有效的二进制数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsBin)]
[[play](https://go.dev/play/p/ogPeg2XJH4P)]
- **IsHex** : 检查字符串是否是有效的十六进制数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsHex)]
[[play](https://go.dev/play/p/M2qpHbEwmm7)]
- **IsBase64URL** : 检查字符串是否是有效的 base64 url。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsBase64URL)]
[[play](https://go.dev/play/p/vhl4mr8GZ6S)]
- **IsJWT** : 检查字符串是否是有效的 JSON Web Token (JWT)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsJWT)]
[[play](https://go.dev/play/p/R6Op7heJbKI)]
- **IsVisa** : 检查字符串是否是有效的 visa 卡号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsVisa)]
[[play](https://go.dev/play/p/SdS2keOyJsl)]
- **IsMasterCard** : 检查字符串是否是有效的 MasterCard 卡号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsMasterCard)]
[[play](https://go.dev/play/p/CwWBFRrG27b)]
- **IsAmericanExpress** : 检查字符串是否是有效的 American Express 卡号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsAmericanExpress)]
[[play](https://go.dev/play/p/HIDFpcOdpkd)]
- **IsUnionPay** : 检查字符串是否是有效的美国银联卡号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsUnionPay)]
[[play](https://go.dev/play/p/CUHPEwEITDf)]
- **IsChinaUnionPay** : 检查字符串是否是有效的中国银联卡号。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsChinaUnionPay)]
[[play](https://go.dev/play/p/yafpdxLiymu)]
25. xerror 包实现一些错误处理函数。 回到目录
```go
import "github.com/duke-git/lancet/v2/xerror"
```
#### 函数列表:
- **New** : 创建 XError 对象实例。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#New)]
[[play](https://go.dev/play/p/w4oWZts7q7f)]
- **Wrap** : 根据 error 对象创建 XError 对象实例,可添加 message。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#Wrap)]
[[play](https://go.dev/play/p/5385qT2dCi4)]
- **Unwrap** : 从 error 对象中解构出 XError。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#Unwrap)]
[[play](https://go.dev/play/p/LKMLep723tu)]
- **XError_Wrap** : 创建新的 XError 对象并将消息和 id 复制到新的对象中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Wrap)]
[[play](https://go.dev/play/p/RpjJ5u5sc97)]
- **XError_Unwrap** : 解构 XEerror 为 error 对象。适配 github.com/pkg/errors。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Unwrap)
[[play](https://go.dev/play/p/VUXJ8BST4c6)]
- **XError_With** : 添加与 XError 对象的键和值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_With)]
[[play](https://go.dev/play/p/ow8UISXX_Dp)]
- **XError_Id** : 设置 XError 对象的 id。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Id)]
[[play](https://go.dev/play/p/X6HBlsy58U9)]
- **XError_Is** : 检查目标 error 是否为 XError,两个错误中的 error.id 是否匹配。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Is)]
[[play](https://go.dev/play/p/X6HBlsy58U9)]
- **XError_Values** : 返回由 With 设置的键和值的映射。将合并所有 XError 键和值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Values)]
[[play](https://go.dev/play/p/ow8UISXX_Dp)]
- **XError_StackTrace** : 返回与 pkg/error 兼容的堆栈信息。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_StackTrace)]
[[play](https://go.dev/play/p/6FAvSQpa7pc)]
- **XError_Info** : 返回可打印的 XError 对象信息。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Info)]
[[play](https://go.dev/play/p/1ZX0ME1F-Jb)]
- **XError_Error** : 实现标准库的 error 接口。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#XError_Error)]
[[play](https://go.dev/play/p/w4oWZts7q7f)]
- **TryUnwrap** : 检查 error, 如果 err 为 nil 则展开,则它返回一个有效值,如果 err 不是 nil 则 Unwrap 使用 err 发生 panic。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#TryUnwrap)]
[[play](https://go.dev/play/p/acyZVkNZEeW)]
## 如何贡献代码
#### [代码贡献指南](./CONTRIBUTION.zh-CN.md)
## 贡献者
感谢所有为lancet贡献过代码的人!
## GitHub Stars
[](https://star-history.com/#duke-git/lancet&Date)