diff --git a/README.md b/README.md
index 80ea611..4a2a2a6 100644
--- a/README.md
+++ b/README.md
@@ -251,7 +251,7 @@ import "github.com/duke-git/lancet/v2/convertor"
[[play](https://go.dev/play/p/j4DP5dquxnk)]
- **CopyProperties** : copies each field from the source struct into the destination struct.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor.md#CopyProperties)]
-
+ [[play](https://go.dev/play/p/FOVY3XJL-6B)]
### 5. Cryptor package is for data encryption and decryption.
@@ -456,9 +456,6 @@ import "github.com/duke-git/lancet/v2/datetime"
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime.md#ToIso8601)]
[[play](https://go.dev/play/p/mkhOHQkdeA2)]
-
-
-
### 7. Datastructure package constains some common data structure. eg. list, linklist, stack, queue, set, tree, graph.
```go
@@ -593,7 +590,6 @@ import "github.com/duke-git/lancet/v2/function"
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function.md#Watcher)]
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
-
### 11. Maputil package includes some functions to manipulate map.
```go
@@ -610,14 +606,19 @@ import "github.com/duke-git/lancet/v2/maputil"
[[play](https://go.dev/play/p/fSvF3wxuNG7)]
- **FilterByKeys** : iterates over map, return a new map whose keys are all given keys
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#FilterByKeys)]
+ [[play](https://go.dev/play/p/7ov6BJHbVqh)]
- **FilterByValues** : iterates over map, return a new map whose values are all given values.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#FilterByValues)]
+ [[play](https://go.dev/play/p/P3-9MdcXegR)]
- **OmitBy** : the opposite of Filter, removes all the map elements for which the predicate function returns true.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#OmitBy)]
+ [[play](https://go.dev/play/p/YJM4Hj5hNwm)]
- **OmitByKeys** : the opposite of FilterByKeys, extracts all the map elements which keys are not omitted.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#OmitByKeys)]
+ [[play](https://go.dev/play/p/jXGrWDBfSRp)]
- **OmitByValues** : the opposite of FilterByValues. remov all elements whose value are in the give slice.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#OmitByValues)]
+ [[play](https://go.dev/play/p/XB7Y10uw20_U)]
- **Intersect** : iterates over maps, return a new map of key and value pairs in all given maps.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#Intersect)]
[[play](https://go.dev/play/p/Zld0oj3sjcC)]
@@ -626,6 +627,7 @@ import "github.com/duke-git/lancet/v2/maputil"
[[play](https://go.dev/play/p/xNB5bTb97Wd)]
- **KeysBy** : creates a slice whose element is the result of function mapper invoked by every map's key.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#KeysBy)]
+ [[play](https://go.dev/play/p/hI371iB8Up8)]
- **Merge** : merge maps, next key will overwrite previous key.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#Merge)]
[[play](https://go.dev/play/p/H95LENF1uB-)]
@@ -637,16 +639,22 @@ import "github.com/duke-git/lancet/v2/maputil"
[[play](https://go.dev/play/p/CBKdUc5FTW6)]
- **ValuesBy** : creates a slice whose element is the result of function mapper invoked by every map's value.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#ValuesBy)]
+ [[play](https://go.dev/play/p/sg9-oRidh8f)]
- **MapKeys** : transforms a map to other type map by manipulating it's keys.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#MapKeys)]
+ [[play](https://go.dev/play/p/8scDxWeBDKd)]
- **MapValues** : transforms a map to other type map by manipulating it's values.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#MapValues)]
+ [[play](https://go.dev/play/p/g92aY3fc7Iw)]
- **Entries** : transforms a map into array of key/value pairs.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#Entries)]
+ [[play](https://go.dev/play/p/Ltb11LNcElY)]
- **FromEntries** : creates a map based on a slice of key/value pairs.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#FromEntries)]
+ [[play](https://go.dev/play/p/fTdu4sCNjQO)]
- **Transform** : transform a map to another type map.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#Transform)]
+ [[play](https://go.dev/play/p/P6ovfToM3zj)]
- **IsDisjoint** : check two map are disjoint if they have no keys in common.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil.md#IsDisjoint)]
[[play](https://go.dev/play/p/N9qgYg_Ho6f)]
@@ -759,8 +767,6 @@ import "github.com/duke-git/lancet/v2/netutil"
- **ParseHttpResponse** : decode http response into target object.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil.md#ParseHttpResponse)]
-
-
### 14. Random package implements some basic functions to generate random int and string.
```go
@@ -834,6 +840,7 @@ import "github.com/duke-git/lancet/v2/slice"
[[play](https://go.dev/play/p/_454yEHcNjf)]
- **ContainBy** : returns true if predicate function return true.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#ContainBy)]
+ [[play](https://go.dev/play/p/49tkHfX4GNc)]
- **ContainSubSlice** : check if the slice contain a given subslice or not.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#ContainSubSlice)]
[[play](https://go.dev/play/p/bcuQ3UT6Sev)]
@@ -890,6 +897,7 @@ import "github.com/duke-git/lancet/v2/slice"
[[play](https://go.dev/play/p/SdPna-7qK4T)]
- **FilterMap** : returns a slice which apply both filtering and mapping to the given slice.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#FilterMap)]
+ [[play](https://go.dev/play/p/J94SZ_9MiIe)]
- **Find** : iterates over elements of slice, returning the first one that passes a truth test on predicate function.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#Find)]
[[play](https://go.dev/play/p/CBKeBoHVLgq)]
@@ -904,6 +912,7 @@ import "github.com/duke-git/lancet/v2/slice"
[[play](https://go.dev/play/p/yjYNHPyCFaF)]
- **FlatMap** : manipulates a slice and transforms and flattens it to a slice of another type.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#FlatMap)]
+ [[play](https://go.dev/play/p/_QARWlWs1N_F)]
- **ForEach** : iterates over elements of slice and invokes function for each element.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice.md#ForEach)]
[[play](https://go.dev/play/p/DrPaa4YsHRF)]
@@ -1055,6 +1064,7 @@ import "github.com/duke-git/lancet/v2/strutil"
[[play](https://go.dev/play/p/sBbBxRbs8MM)]
- **Pad** : pads string on the left and right side if it's shorter than size.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil.md#Pad)]
+ [[play](https://go.dev/play/p/NzImQq-VF8q)]
- **PadEnd** : pads string with given characters on the right side if it's shorter than limit size. Padding characters are truncated if they exceed size.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil.md#PadEnd)]
[[play](https://go.dev/play/p/9xP8rN0vz--)]
@@ -1084,8 +1094,10 @@ import "github.com/duke-git/lancet/v2/strutil"
[[play](https://go.dev/play/p/Ec2q4BzCpG-)]
- **SplitWords** : splits a string into words, word only contains alphabetic characters.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil.md#SplitWords)]
+ [[play](https://go.dev/play/p/KLiX4WiysMM)]
- **WordCount** : return the number of meaningful word of a string, word only contains alphabetic characters.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil.md#WordCount)]
+ [[play](https://go.dev/play/p/bj7_odx3vRf)]
### 19. System package contain some functions about os, runtime, shell command.
@@ -1223,6 +1235,7 @@ import "github.com/duke-git/lancet/v2/xerror"
```
#### Function list:
+
- **New** : creates a new XError pointer instance with message.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror.md#New)]
[[play](https://go.dev/play/p/w4oWZts7q7f)]
@@ -1247,7 +1260,7 @@ import "github.com/duke-git/lancet/v2/xerror"
- **XError_Is** : checks if target error is XError and Error.id of two errors are matched.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror.md#XError_Is)]
[[play](https://go.dev/play/p/X6HBlsy58U9)]
-- **XError_Values** : returns map of key and value that is set by XError.With function.
+- **XError_Values** : returns map of key and value that is set by XError.With function.
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror.md#XError_Values)]
[[play](https://go.dev/play/p/ow8UISXX_Dp)]
- **XError_StackTrace** : returns stack trace which is compatible with pkg/errors.
@@ -1263,7 +1276,6 @@ import "github.com/duke-git/lancet/v2/xerror"
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror.md#TryUnwrap)]
[[play](https://go.dev/play/p/acyZVkNZEeW)]
-
## How to Contribute
I really appreciate any code commits which make lancet lib powerful. Please follow the rules below to create your pull request.
diff --git a/README_zh-CN.md b/README_zh-CN.md
index 22558a3..3c8578f 100644
--- a/README_zh-CN.md
+++ b/README_zh-CN.md
@@ -181,7 +181,7 @@ import "github.com/duke-git/lancet/v2/condition"
[[play](https://go.dev/play/p/g2j08F_zZky)
- **Xnor** : 如果 a 和 b 都是真的或 a 和 b 均是假的,则返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Xnor)]
- [[play](https://go.dev/play/p/OuDB9g51643)]]
+[[play](https://go.dev/play/p/OuDB9g51643)]]
- **Nand** : 如果 a 和 b 都为真,返回 false,否则返回 true
[[doc](https://github.com/duke-git/lancet/blob/main/docs/condition_zh-CN.md#Nand)]
[[play](https://go.dev/play/p/vSRMLxLIbq8)]
@@ -250,7 +250,7 @@ import "github.com/duke-git/lancet/v2/convertor"
[[play](https://go.dev/play/p/j4DP5dquxnk)]
- **CopyProperties** : 拷贝不同结构体之间的同名字段。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/convertor_zh-CN.md#CopyProperties)]
-
+ [[play](https://go.dev/play/p/FOVY3XJL-6B)]
### 5. cryptor 加密包支持数据加密和解密,获取 md5,hash 值。支持 base64, md5, hmac, aes, des, rsa。
@@ -260,103 +260,101 @@ import "github.com/duke-git/lancet/v2/cryptor"
#### 函数列表:
-- **AesEcbEncrypt** : 使用AES ECB算法模式加密数据。
+- **AesEcbEncrypt** : 使用 AES ECB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesEcbEncrypt)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
-- **AesEcbDecrypt** : 使用AES ECB算法模解密数据。
+- **AesEcbDecrypt** : 使用 AES ECB 算法模解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesEcbDecrypt)]
[[play](https://go.dev/play/p/zI6xsmuQRbn)]
-- **AesCbcEncrypt** : 使用AES CBC算法模式加密数据。
+- **AesCbcEncrypt** : 使用 AES CBC 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCbcEncrypt)]
[[play](https://go.dev/play/p/IOq_g8_lKZD)]
-- **AesCbcDecrypt** : 使用AES CBC算法模式解密数据。
+- **AesCbcDecrypt** : 使用 AES CBC 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCbcDecrypt)]
[[play](https://go.dev/play/p/IOq_g8_lKZD)]
-- **AesCtrCrypt** : 使用AES CTR算法模式加密/解密数据。
+- **AesCtrCrypt** : 使用 AES CTR 算法模式加密/解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCtrCrypt)]
[[play](https://go.dev/play/p/SpaZO0-5Nsp)]
-- **AesCfbEncrypt** : 使用AES CFB算法模式加密数据。
+- **AesCfbEncrypt** : 使用 AES CFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCfbEncrypt)]
[[play](https://go.dev/play/p/tfkF10B13kH)]
-- **AesCfbDecrypt** : 使用AES CFB算法模式解密数据。
+- **AesCfbDecrypt** : 使用 AES CFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesCfbDecrypt)]
[[play](https://go.dev/play/p/tfkF10B13kH)]
-- **AesOfbEncrypt** : 使用AES OFB算法模式加密数据。
+- **AesOfbEncrypt** : 使用 AES OFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesOfbEncrypt)]
[[play](https://go.dev/play/p/VtHxtkUj-3F)]
-- **AesOfbDecrypt** : 使用AES OFB算法模式解密数据。
+- **AesOfbDecrypt** : 使用 AES OFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#AesOfbDecrypt)]
[[play](https://go.dev/play/p/VtHxtkUj-3F)]
-- **Base64StdEncode** : 将字符串base64编码。
+- **Base64StdEncode** : 将字符串 base64 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Base64StdEncode)]
[[play](https://go.dev/play/p/VOaUyQUreoK)]
-- **Base64StdDecode** : 解码base64字符串。
+- **Base64StdDecode** : 解码 base64 字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Base64StdDecode)]
[[play](https://go.dev/play/p/RWQylnJVgIe)]
-- **DesEcbEncrypt** : 使用DES ECB算法模式加密数据。
+- **DesEcbEncrypt** : 使用 DES ECB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesEcbEncrypt)]
[[play](https://go.dev/play/p/8qivmPeZy4P)]
-- **DesEcbDecrypt** : 使用DES ECB算法模解密数据。
+- **DesEcbDecrypt** : 使用 DES ECB 算法模解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesEcbDecrypt)]
[[play](https://go.dev/play/p/8qivmPeZy4P)]
-- **DesCbcEncrypt** : 使用DES CBC算法模式加密数据。
+- **DesCbcEncrypt** : 使用 DES CBC 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCbcEncrypt)]
[[play](https://go.dev/play/p/4cC4QvWfe3_1)]
-- **DesCbcDecrypt** : 使用DES CBC算法模式解密数据。
+- **DesCbcDecrypt** : 使用 DES CBC 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCbcDecrypt)]
[[play](https://go.dev/play/p/4cC4QvWfe3_1)]
-- **DesCtrCrypt** : 使用DES CTR算法模式加密/解密数据。
+- **DesCtrCrypt** : 使用 DES CTR 算法模式加密/解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCtrCrypt)]
[[play](https://go.dev/play/p/9-T6OjKpcdw)]
-- **DesCfbEncrypt** : 使用DES CFB算法模式加密数据。
+- **DesCfbEncrypt** : 使用 DES CFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCfbEncrypt)]
[[play](https://go.dev/play/p/y-eNxcFBlxL)]
-- **DesCfbDecrypt** : 使用DES CFB算法模式解密数据。
+- **DesCfbDecrypt** : 使用 DES CFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesCfbDecrypt)]
[[play](https://go.dev/play/p/y-eNxcFBlxL)]
-- **DesOfbEncrypt** : 使用DES OFB算法模式加密数据。
+- **DesOfbEncrypt** : 使用 DES OFB 算法模式加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesOfbEncrypt)]
[[play](https://go.dev/play/p/74KmNadjN1J)]
-- **DesOfbDecrypt** : 使用DES OFB算法模式解密数据。
+- **DesOfbDecrypt** : 使用 DES OFB 算法模式解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#DesOfbDecrypt)]
[[play](https://go.dev/play/p/74KmNadjN1J)]
-- **HmacMd5** : 返回字符串md5 hmac值。
+- **HmacMd5** : 返回字符串 md5 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacMd5)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
-- **HmacSha1** : 返回字符串sha1 hmac值。
+- **HmacSha1** : 返回字符串 sha1 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha1)]
[[play](https://go.dev/play/p/1UI4oQ4WXKM)]
-- **HmacSha256** : 返回字符串sha256 hmac值。
+- **HmacSha256** : 返回字符串 sha256 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha256)]
[[play](https://go.dev/play/p/HhpwXxFhhC0)]
-- **HmacSha512** : 返回字符串sha256 hmac值。
+- **HmacSha512** : 返回字符串 sha256 hmac 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#HmacSha512)]
[[play](https://go.dev/play/p/59Od6m4A0Ud)]
-- **Md5String** : 返回字符串md5值。
+- **Md5String** : 返回字符串 md5 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Md5String)]
[[play](https://go.dev/play/p/1bLcVetbTOI)]
-- **Md5File** : 返回文件md5值。
+- **Md5File** : 返回文件 md5 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Md5File)]
-- **Sha1** : 返回字符串sha1哈希值。
+- **Sha1** : 返回字符串 sha1 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha1)]
[[play](https://go.dev/play/p/_m_uoD1deMT)]
-- **Sha256** :返回字符串sha256哈希值。
+- **Sha256** :返回字符串 sha256 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha256)]
[[play](https://go.dev/play/p/tU9tfBMIAr1)]
-- **Sha512** : 返回字符串sha512哈希值。
+- **Sha512** : 返回字符串 sha512 哈希值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#Sha512)]
[[play](https://go.dev/play/p/3WsvLYZxsHa)]
-- **GenerateRsaKey** : 在当前目录下创建rsa私钥文件和公钥文件。
+- **GenerateRsaKey** : 在当前目录下创建 rsa 私钥文件和公钥文件。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#GenerateRsaKey)]
[[play](https://go.dev/play/p/zutRHrDqs0X)]
-- **RsaEncrypt** : 用公钥文件ras加密数据。
+- **RsaEncrypt** : 用公钥文件 ras 加密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#RsaEncrypt)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
-- **RsaDecrypt** : 用私钥文件rsa解密数据。
+- **RsaDecrypt** : 用私钥文件 rsa 解密数据。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/cryptor_zh-CN.md#RsaDecrypt)]
[[play](https://go.dev/play/p/uef0q1fz53I)]
-
-
### 6. datetime 日期时间处理包,格式化日期,比较日期。
@@ -432,32 +430,30 @@ import "github.com/duke-git/lancet/v2/datetime"
- **FormatStrToTime** : 将字符串格式化成时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#FormatStrToTime)]
[[play](https://go.dev/play/p/1h9FwdU8ql4)]
-- **NewUnix** : 创建一个unix时间戳。
+- **NewUnix** : 创建一个 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewUnix)]
[[play](https://go.dev/play/p/psoSuh_kLRt)]
-- **NewUnixNow** : 创建一个当前时间的unix时间戳。
+- **NewUnixNow** : 创建一个当前时间的 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewUnixNow)]
[[play](https://go.dev/play/p/U4PPx-9D0oz)]
-- **NewFormat** : 创建一个yyyy-mm-dd hh:mm:ss格式时间字符串的unix时间戳。
+- **NewFormat** : 创建一个 yyyy-mm-dd hh:mm:ss 格式时间字符串的 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewFormat)]
[[play](https://go.dev/play/p/VkW08ZOaXPZ)]
-- **NewISO8601** : 创建一个iso8601格式时间字符串的unix时间戳。
+- **NewISO8601** : 创建一个 iso8601 格式时间字符串的 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#NewISO8601)]
[[play](https://go.dev/play/p/mkhOHQkdeA2)]
-- **ToUnix** : 返回unix时间戳。
+- **ToUnix** : 返回 unix 时间戳。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToUnix)]
[[play](https://go.dev/play/p/_LUiwAdocjy)]
- **ToFormat** : 返回格式'yyyy-mm-dd hh:mm:ss'的日期字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToFormat)]
[[play](https://go.dev/play/p/VkW08ZOaXPZ)]
-- **ToFormatForTpl** : 返回tpl格式指定的日期字符串。
+- **ToFormatForTpl** : 返回 tpl 格式指定的日期字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToFormatForTpl)]
[[play](https://go.dev/play/p/nyXxXcQJ8L5)]
-- **ToIso8601** : 返回iso8601日期字符串。
+- **ToIso8601** : 返回 iso8601 日期字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datetime_zh-CN.md#ToIso8601)]
[[play](https://go.dev/play/p/mkhOHQkdeA2)]
-
-
### 7. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph.
@@ -486,14 +482,11 @@ import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set_zh-CN.md)]
- **Tree** : 二叉搜索树。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree_zh-CN.md)]
-- **Heap** : 二叉max堆。
+- **Heap** : 二叉 max 堆。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap_zh-CN.md)]
- **Hashmap** : 哈希映射。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap_zh-CN.md)]
-
-
-
### 8. fileutil 包含文件基本操作。
```go
@@ -568,35 +561,34 @@ import "github.com/duke-git/lancet/v2/function"
#### 函数列表:
-- **After** : 创建一个函数,当该函数被调用n或更多次之后将执行传入的函数。
+- **After** : 创建一个函数,当该函数被调用 n 或更多次之后将执行传入的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#After)]
[[play](https://go.dev/play/p/eRD5k2vzUVX)]
-- **Before** : 创建一个函数,当该函数被调用不超过n次时,将执行执行传入的函数。
+- **Before** : 创建一个函数,当该函数被调用不超过 n 次时,将执行执行传入的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Before)]
[[play](https://go.dev/play/p/0HqUDIFZ3IL)]
- **CurryFn** : 创建柯里化函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#CurryFn)]
[[play](https://go.dev/play/p/5HopfDwANKX)]
-- **Compose** : 从右至左组合函数列表fnList,返回组合后的函数。
+- **Compose** : 从右至左组合函数列表 fnList,返回组合后的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Compose)]
[[play](https://go.dev/play/p/KKfugD4PKYF)]
-- **Delay** : 延迟delay时间后调用函数。
+- **Delay** : 延迟 delay 时间后调用函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Delay)]
[[play](https://go.dev/play/p/Ivtc2ZE-Tye)]
-- **Debounced** : 创建一个debounced函数,该函数延迟调用fn直到自上次调用debounced函数后等待持续时间过去。
+- **Debounced** : 创建一个 debounced 函数,该函数延迟调用 fn 直到自上次调用 debounced 函数后等待持续时间过去。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Debounced)]
[[play](https://go.dev/play/p/absuEGB_GN7)]
-- **Schedule** : 每次持续时间调用函数,直到关闭返回的channel。
+- **Schedule** : 每次持续时间调用函数,直到关闭返回的 channel。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Schedule)]
[[play](https://go.dev/play/p/hbON-Xeyn5N)]
- **Pipeline** : 从右至左执行函数列表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Pipeline)]
[[play](https://go.dev/play/p/mPdUVvj6HD6)]
-- **Watcher** : Watcher用于记录代码执行时间。可以启动/停止/重置手表定时器。获取函数执行的时间。
+- **Watcher** : Watcher 用于记录代码执行时间。可以启动/停止/重置手表定时器。获取函数执行的时间。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/function_zh-CN.md#Watcher)]
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
-
### 11. maputil 包括一些操作 map 的函数.
```go
@@ -611,24 +603,30 @@ import "github.com/duke-git/lancet/v2/maputil"
- **Filter** : 迭代 map 中的每对 key 和 value,返回 map,其中的 key 和 value 符合 predicate 函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Filter)]
[[play](https://go.dev/play/p/fSvF3wxuNG7)]
-- **FilterByKeys** : 迭代map, 返回一个新map,其key都是给定的key值。
+- **FilterByKeys** : 迭代 map, 返回一个新 map,其 key 都是给定的 key 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#FilterByKeys)]
-- **FilterByValues** : 迭代map, 返回一个新map,其value都是给定的value值。
+ [[play](https://go.dev/play/p/7ov6BJHbVqh)]
+- **FilterByValues** : 迭代 map, 返回一个新 map,其 value 都是给定的 value 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#FilterByValues)]
-- **OmitBy** : Filter的反向操作, 迭代map中的每对key和value, 删除符合predicate函数的key, value, 返回新map。
+ [[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/maputil_zh-CN#OmitBy)]
-- **OmitByKeys** : FilterByKeys的反向操作, 迭代map, 返回一个新map,其key不包括给定的key值。
+ [[play](https://go.dev/play/p/YJM4Hj5hNwm)]
+- **OmitByKeys** : FilterByKeys 的反向操作, 迭代 map, 返回一个新 map,其 key 不包括给定的 key 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#OmitByKeys)]
-- **OmitByValues** : FilterByValues的反向操作, 迭代map, 返回一个新map,其value不包括给定的value值。
+ [[play](https://go.dev/play/p/jXGrWDBfSRp)]
+- **OmitByValues** : FilterByValues 的反向操作, 迭代 map, 返回一个新 map,其 value 不包括给定的 value 值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#OmitByValues)]
+ [[play](https://go.dev/play/p/XB7Y10uw20_U)]
- **Intersect** : 多个 map 的交集操作。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Intersect)]
[[play](https://go.dev/play/p/Zld0oj3sjcC)]
- **Keys** : 返回 map 中所有 key 组成的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Keys)]
[[play](https://go.dev/play/p/xNB5bTb97Wd)]
-- **KeysBy** : 创建一个切片,其元素是每个map的key调用mapper函数的结果。
+- **KeysBy** : 创建一个切片,其元素是每个 map 的 key 调用 mapper 函数的结果。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#KeysBy)]
+ [[play](https://go.dev/play/p/hI371iB8Up8)]
- **Merge** : 合并多个 map, 相同的 key 会被之后的 key 覆盖。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Merge)]
[[play](https://go.dev/play/p/H95LENF1uB-)]
@@ -638,19 +636,25 @@ import "github.com/duke-git/lancet/v2/maputil"
- **Values** : 返回 map 中所有 values 组成的切片
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#Values)]
[[play](https://go.dev/play/p/CBKdUc5FTW6)]
-- **ValuesBy** : 创建一个切片,其元素是每个map的value调用mapper函数的结果。
+- **ValuesBy** : 创建一个切片,其元素是每个 map 的 value 调用 mapper 函数的结果。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#ValuesBy)]
-- **MapKeys** : 操作map的每个key,然后转为新的map。
+ [[play](https://go.dev/play/p/sg9-oRidh8f)]
+- **MapKeys** : 操作 map 的每个 key,然后转为新的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#MapKeys)]
-- **MapValues** : 操作map的每个value,然后转为新的map。
+ [[play](https://go.dev/play/p/8scDxWeBDKd)]
+- **MapValues** : 操作 map 的每个 value,然后转为新的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#MapValues)]
-- **Entries** : 将map转换为键/值对切片。
+ [[play](https://go.dev/play/p/g92aY3fc7Iw)]
+- **Entries** : 将 map 转换为键/值对切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#Entries)]
-- **FromEntries** : 基于键/值对的切片创建map。
+ [[play](https://go.dev/play/p/Ltb11LNcElY)]
+- **FromEntries** : 基于键/值对的切片创建 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#FromEntries)]
-- **Transform** : 将map转换为其他类型的map。
+ [[play](https://go.dev/play/p/fTdu4sCNjQO)]
+- **Transform** : 将 map 转换为其他类型的 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN#Transform)]
-- **IsDisjoint** : 验证两个map是否具有不同的key。
+ [[play](https://go.dev/play/p/P6ovfToM3zj)]
+- **IsDisjoint** : 验证两个 map 是否具有不同的 key。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/maputil_zh-CN.md#IsDisjoint)]
[[play](https://go.dev/play/p/N9qgYg_Ho6f)]
@@ -707,64 +711,61 @@ import "github.com/duke-git/lancet/v2/netutil"
#### 函数列表:
-- **ConvertMapToQueryString** : 将map转换成http查询字符串。
+- **ConvertMapToQueryString** : 将 map 转换成 http 查询字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#ConvertMapToQueryString)]
[[play](https://go.dev/play/p/jnNt_qoSnRi)]
-- **EncodeUrl** : 编码url query string的值(?a=1&b=[2] -> ?a=1&b=%5B2%5D)。
+- **EncodeUrl** : 编码 url query string 的值(?a=1&b=[2] -> ?a=1&b=%5B2%5D)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#EncodeUrl)]
[[play](https://go.dev/play/p/bsZ6BRC4uKI)]
-- **GetInternalIp** : 获取内部ipv4。
+- **GetInternalIp** : 获取内部 ipv4。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetInternalIp)]
[[play](https://go.dev/play/p/5mbu-gFp7ei)]
-- **GetIps** : 获取系统ipv4地址列表。
+- **GetIps** : 获取系统 ipv4 地址列表。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetIps)]
[[play](https://go.dev/play/p/NUFfcEmukx1)]
-- **GetMacAddrs** : 获取系统mac地址列。
+- **GetMacAddrs** : 获取系统 mac 地址列。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetMacAddrs)]
[[play](https://go.dev/play/p/Rq9UUBS_Xp1)]
-- **GetPublicIpInfo** : 获取[公网ip信息](http://ip-api.com/json/).
+- **GetPublicIpInfo** : 获取[公网 ip 信息](http://ip-api.com/json/).
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetPublicIpInfo)]
[[play](https://go.dev/play/p/YDxIfozsRHR)]
-- **GetRequestPublicIp** : 获取http请求ip。
+- **GetRequestPublicIp** : 获取 http 请求 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#GetRequestPublicIp)]
[[play](https://go.dev/play/p/kxU-YDc_eBo)]
-- **IsPublicIP** : 判断ip是否是公共ip。
+- **IsPublicIP** : 判断 ip 是否是公共 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#IsPublicIP)]
[[play](https://go.dev/play/p/nmktSQpJZnn)]
-- **IsInternalIP** : 判断ip是否是局域网ip。
+- **IsInternalIP** : 判断 ip 是否是局域网 ip。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#IsInternalIP)]
[[play](https://go.dev/play/p/sYGhXbgO4Cb)]
-- **HttpRequest** : 用于抽象HTTP请求实体的结构。
+- **HttpRequest** : 用于抽象 HTTP 请求实体的结构。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpRequest)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
-- **HttpClient** : 用于发送HTTP请求。
+- **HttpClient** : 用于发送 HTTP 请求。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpClient)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
-- **SendRequest** : 发送http请求。
+- **SendRequest** : 发送 http 请求。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#SendRequest)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
-- **DecodeResponse** : 解析http响应体到目标结构体。
+- **DecodeResponse** : 解析 http 响应体到目标结构体。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#DecodeResponse)]
[[play](https://go.dev/play/p/jUSgynekH7G)]
-- **StructToUrlValues** : 将结构体转为url values, 仅转化结构体导出字段并且包含`json` tag。
+- **StructToUrlValues** : 将结构体转为 url values, 仅转化结构体导出字段并且包含`json` tag。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#StructToUrlValues)]
[[play](https://go.dev/play/p/pFqMkM40w9z)]
-- **HttpGetdeprecated** : 发送http get请求(已弃用:SendRequest代替)。
+- **HttpGetdeprecated** : 发送 http get 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpGet)]
-- **HttpDeletedeprecated** : 发送http delete请求(已弃用:SendRequest代替)。
+- **HttpDeletedeprecated** : 发送 http delete 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpDelete)]
-- **HttpPostdeprecated** : 发送http post请求(已弃用:SendRequest代替)。
+- **HttpPostdeprecated** : 发送 http post 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPost)]
-- **HttpPutdeprecated** : 发送http put请求(已弃用:SendRequest代替)。
+- **HttpPutdeprecated** : 发送 http put 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPut)]
-- **HttpPatchdeprecated** : 发送http patch请求(已弃用:SendRequest代替)。
+- **HttpPatchdeprecated** : 发送 http patch 请求(已弃用:SendRequest 代替)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#HttpPatch)]
-- **ParseHttpResponse** : 解析http响应体到目标结构体。
+- **ParseHttpResponse** : 解析 http 响应体到目标结构体。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/netutil_zh-CN.md#ParseHttpResponse)]
-
-
-
### 14. random 随机数生成器包,可以生成随机[]bytes, int, string。
```go
@@ -776,7 +777,7 @@ import "github.com/duke-git/lancet/v2/random"
- **RandBytes** : 生成随机字节切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandBytes)]
[[play](https://go.dev/play/p/EkiLESeXf8d)]
-- **RandInt** : 生成随机int, 范围[min, max)。
+- **RandInt** : 生成随机 int, 范围[min, max)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandInt)]
[[play](https://go.dev/play/p/pXyyAAI5YxD)]
- **RandString** : 生成给定长度的随机字符串,只包含字母(a-zA-Z)。
@@ -794,11 +795,9 @@ import "github.com/duke-git/lancet/v2/random"
- **RandNumeralOrLetter** : 生成给定长度的随机字符串(数字+字母)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#RandNumeralOrLetter)]
[[play](https://go.dev/play/p/19CEQvpx2jD)]
-- **UUIdV4** : 生成UUID v4字符串。
+- **UUIdV4** : 生成 UUID v4 字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/random_zh-CN.md#UUIdV4)]
[[play](https://go.dev/play/p/_Z9SFmr28ft)]
-
-
### 15. retry 重试执行函数直到函数运行成功或被 context cancel。
@@ -808,24 +807,22 @@ import "github.com/duke-git/lancet/v2/retry"
#### 函数列表:
-- **Context** : 设置重试context参数。
+- **Context** : 设置重试 context 参数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Context)]
[[play](https://go.dev/play/p/xnAOOXv9GkS)]
-- **Retry** : 重试执行函数retryFunc,直到函数运行成功,或被context取消。
+- **Retry** : 重试执行函数 retryFunc,直到函数运行成功,或被 context 取消。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Retry)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
- **RetryFunc** : 重试执行的函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryFunc)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
-- **RetryDuration** : 设置重试间隔时间,默认3秒。
+- **RetryDuration** : 设置重试间隔时间,默认 3 秒。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryDuration)]
[[play](https://go.dev/play/p/nk2XRmagfVF)]
-- **RetryTimes** : 设置重试次数,默认5。
+- **RetryTimes** : 设置重试次数,默认 5。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryTimes)]
[[play](https://go.dev/play/p/ssfVeU2SwLO)]
-
-
### 16. slice 包含操作切片的方法集合。
```go
@@ -833,36 +830,38 @@ import "github.com/duke-git/lancet/v2/slice"
```
#### 函数列表:
+
- **AppendIfAbsent** : 当前切片中不包含值时,将该值追加到切片中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#AppendIfAbsent)]
[[play](https://go.dev/play/p/GNdv7Jg2Taj)]
-- **Contain** : 判断slice是否包含value。
+- **Contain** : 判断 slice 是否包含 value。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Contain)]
[[play](https://go.dev/play/p/_454yEHcNjf)]
-- **ContainBy** : 根据predicate函数判断切片是否包含某个值。
+- **ContainBy** : 根据 predicate 函数判断切片是否包含某个值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ContainBy)]
-- **ContainSubSlice** : 判断slice是否包含subslice。
+ [[play](https://go.dev/play/p/49tkHfX4GNc)]
+- **ContainSubSlice** : 判断 slice 是否包含 subslice。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ContainSubSlice)]
[[play](https://go.dev/play/p/bcuQ3UT6Sev)]
-- **Chunk** : 按照size参数均分slice。
+- **Chunk** : 按照 size 参数均分 slice。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Chunk)]
[[play](https://go.dev/play/p/b4Pou5j2L_C)]
-- **Compact** : 去除slice中的假值(false values are false, nil, 0, "")。
+- **Compact** : 去除 slice 中的假值(false values are false, nil, 0, "")。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Compact)]
[[play](https://go.dev/play/p/pO5AnxEr3TK)]
-- **Concat** : 合并多个slices到一个slice中。
+- **Concat** : 合并多个 slices 到一个 slice 中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Concat)]
[[play](https://go.dev/play/p/gPt-q7zr5mk)]
- **Count** : 返回切片中指定元素的个数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Count)]
[[play](https://go.dev/play/p/Mj4oiEnQvRJ)]
-- **CountBy** : 遍历切片,对每个元素执行函数predicate. 返回符合函数返回值为true的元素的个数。
+- **CountBy** : 遍历切片,对每个元素执行函数 predicate. 返回符合函数返回值为 true 的元素的个数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#CountBy)]
[[play](https://go.dev/play/p/tHOccTMDZCC)]
- **Difference** : 创建一个切片,其元素不包含在另一个给定切片中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Difference)]
[[play](https://go.dev/play/p/VXvadzLzhDa)]
-- **DifferenceBy** : 将两个slice中的每个元素调用iteratee函数,并比较它们的返回值,如果不相等返回在slice中对应的值。
+- **DifferenceBy** : 将两个 slice 中的每个元素调用 iteratee 函数,并比较它们的返回值,如果不相等返回在 slice 中对应的值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DifferenceBy)]
[[play](https://go.dev/play/p/DiivgwM5OnC)]
- **DifferenceWith** : 接受比较器函数,该比较器被调用以将切片的元素与值进行比较。 结果值的顺序和引用由第一个切片确定。
@@ -871,36 +870,37 @@ import "github.com/duke-git/lancet/v2/slice"
- **DeleteAt** : 删除切片中指定开始索引到结束索引的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DeleteAt)]
[[play](https://go.dev/play/p/pJ-d6MUWcvK)]
-- **Drop** : 从切片头部删除n个元素。
+- **Drop** : 从切片头部删除 n 个元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Drop)]
[[play](https://go.dev/play/p/jnPO2yQsT8H)]
-- **DropRight** : 从切片尾部删除n个元素。
+- **DropRight** : 从切片尾部删除 n 个元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DropRight)]
[[play](https://go.dev/play/p/8bcXvywZezG)]
-- **DropWhile** : 从切片的头部删除n个元素,这个n个元素满足predicate函数返回true。
+- **DropWhile** : 从切片的头部删除 n 个元素,这个 n 个元素满足 predicate 函数返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DropWhile)]
[[play](https://go.dev/play/p/4rt252UV_qs)]
-- **DropRightWhile** : 从切片的尾部删除n个元素,这个n个元素满足predicate函数返回true。
+- **DropRightWhile** : 从切片的尾部删除 n 个元素,这个 n 个元素满足 predicate 函数返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#DropRightWhile)]
[[play](https://go.dev/play/p/6wyK3zMY56e)]
- **Equal** : 检查两个切片是否相等,相等条件:切片长度相同,元素顺序和值都相同。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Equal)]
[[play](https://go.dev/play/p/WcRQJ37ifPa)]
-- **EqualWith** : 检查两个切片是否相等,相等条件:对两个切片的元素调用比较函数comparator,返回true。
+- **EqualWith** : 检查两个切片是否相等,相等条件:对两个切片的元素调用比较函数 comparator,返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#EqualWith)]
[[play](https://go.dev/play/p/b9iygtgsHI1)]
-- **Every** : 如果切片中的所有值都通过谓词函数,则返回true。
+- **Every** : 如果切片中的所有值都通过谓词函数,则返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Every)]
[[play](https://go.dev/play/p/R8U6Sl-j8cD)]
-- **Filter** : 返回切片中通过predicate函数真值测试的所有元素。
+- **Filter** : 返回切片中通过 predicate 函数真值测试的所有元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Filter)]
[[play](https://go.dev/play/p/SdPna-7qK4T)]
-- **FilterMap** : 返回一个将filter和map操作应用于给定切片的切片。
+- **FilterMap** : 返回一个将 filter 和 map 操作应用于给定切片的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#FilterMap)]
-- **Find** : 遍历切片的元素,返回第一个通过predicate函数真值测试的元素。
+ [[play](https://go.dev/play/p/J94SZ_9MiIe)]
+- **Find** : 遍历切片的元素,返回第一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Find)]
[[play](https://go.dev/play/p/CBKeBoHVLgq)]
-- **FindLast** : 从头到尾遍历slice的元素,返回最后一个通过predicate函数真值测试的元素。
+- **FindLast** : 从头到尾遍历 slice 的元素,返回最后一个通过 predicate 函数真值测试的元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#FindLast)]
[[play](https://go.dev/play/p/FFDPV_j7URd)]
- **Flatten** : 将多维切片展平一层。
@@ -911,19 +911,20 @@ import "github.com/duke-git/lancet/v2/slice"
[[play](https://go.dev/play/p/yjYNHPyCFaF)]
- **FlatMap** : 将切片转换为其它类型切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#FlatMap)]
-- **ForEach** : 遍历切片的元素并为每个元素调用iteratee函数。
+ [[play](https://go.dev/play/p/_QARWlWs1N_F)]
+- **ForEach** : 遍历切片的元素并为每个元素调用 iteratee 函数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ForEach)]
[[play](https://go.dev/play/p/DrPaa4YsHRF)]
- **GroupBy** : 迭代切片的元素,每个元素将按条件分组,返回两个切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#GroupBy)]
[[play](https://go.dev/play/p/QVkPxzPR0iA)]
-- **GroupWith** : 创建一个map,key是iteratee遍历slice中的每个元素返回的结果。值是切片元素。
+- **GroupWith** : 创建一个 map,key 是 iteratee 遍历 slice 中的每个元素返回的结果。值是切片元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#GroupWith)]
[[play](https://go.dev/play/p/ApCvMNTLO8a)]
-- **IntSlicedeprecated** : 将接口切片转换为int切片。
+- **IntSlicedeprecated** : 将接口切片转换为 int 切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#IntSlice)]
[[play](https://go.dev/play/p/FdQXF0Vvqs-)]
-- **InterfaceSlicedeprecated** : 将值转换为interface切片。
+- **InterfaceSlicedeprecated** : 将值转换为 interface 切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#InterfaceSlice)]
[[play](https://go.dev/play/p/FdQXF0Vvqs-)]
- **Intersection** : 返回多个切片的交集。
@@ -938,7 +939,7 @@ import "github.com/duke-git/lancet/v2/slice"
- **LastIndexOf** : 返回在切片中找到最后一个值的索引,如果找不到该值,则返回-1。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#LastIndexOf)]
[[play](https://go.dev/play/p/DokM4cf1IKH)]
-- **Map** : 对slice中的每个元素执行map函数以创建一个新切片。
+- **Map** : 对 slice 中的每个元素执行 map 函数以创建一个新切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Map)]
[[play](https://go.dev/play/p/biaTefqPquw)]
- **Merge** : 合并多个切片(不会消除重复元素)。
@@ -947,16 +948,16 @@ import "github.com/duke-git/lancet/v2/slice"
- **Reverse** : 反转切片中的元素顺序。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Reverse)]
[[play](https://go.dev/play/p/8uI8f1lwNrQ)]
-- **Reduce** : 将切片中的元素依次运行iteratee函数,返回运行结果。
+- **Reduce** : 将切片中的元素依次运行 iteratee 函数,返回运行结果。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Reduce)]
[[play](https://go.dev/play/p/_RfXJJWIsIm)]
-- **Replace** : 返回切片的副本,其中前n个不重叠的old替换为new。
+- **Replace** : 返回切片的副本,其中前 n 个不重叠的 old 替换为 new。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Replace)]
[[play](https://go.dev/play/p/P5mZp7IhOFo)]
-- **ReplaceAll** : 返回切片的副本,将其中old全部替换为new。
+- **ReplaceAll** : 返回切片的副本,将其中 old 全部替换为 new。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#ReplaceAll)]
[[play](https://go.dev/play/p/CzqXMsuYUrx)]
-- **Repeat** : 创建一个切片,包含n个传入的item。
+- **Repeat** : 创建一个切片,包含 n 个传入的 item。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Repeat)]
[[play](https://go.dev/play/p/1CbOmtgILUU)]
- **Shuffle** : 随机打乱切片中的元素顺序。
@@ -971,19 +972,19 @@ import "github.com/duke-git/lancet/v2/slice"
- **IsSorted** : 检查切片元素是否是有序的(升序或降序)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#IsSorted)]
[[play](https://go.dev/play/p/nCE8wPLwSA-)]
-- **IsSortedByKey** : 通过iteratee函数,检查切片元素是否是有序的。
+- **IsSortedByKey** : 通过 iteratee 函数,检查切片元素是否是有序的。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#IsSortedByKey)]
[[play](https://go.dev/play/p/tUoGB7DOHI4)]
- **Sort** : 对任何有序类型(数字或字符串)的切片进行排序,使用快速排序算法。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Sort)]
[[play](https://go.dev/play/p/V9AVjzf_4Fk)]
-- **SortBy** : 按照less函数确定的升序规则对切片进行排序。排序不保证稳定性。
+- **SortBy** : 按照 less 函数确定的升序规则对切片进行排序。排序不保证稳定性。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#SortBy)]
[[play](https://go.dev/play/p/DAhLQSZEumm)]
-- **SortByFielddeprecated** : 按字段对结构切片进行排序。slice元素应为struct,字段类型应为int、uint、string或bool。
+- **SortByFielddeprecated** : 按字段对结构切片进行排序。slice 元素应为 struct,字段类型应为 int、uint、string 或 bool。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#SortByField)]
[[play](https://go.dev/play/p/fU1prOBP9p1)]
-- **Some** : 如果列表中的任何值通过谓词函数,则返回true。
+- **Some** : 如果列表中的任何值通过谓词函数,则返回 true。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Some)]
[[play](https://go.dev/play/p/4pO9Xf9NDGS)]
- **StringSlicedeprecated** : 将接口切片转换为字符串切片。
@@ -1001,7 +1002,7 @@ import "github.com/duke-git/lancet/v2/slice"
- **Unique** : 删除切片中的重复元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Unique)]
[[play](https://go.dev/play/p/AXw0R3ZTE6a)]
-- **UniqueBy** : 对切片的每个元素调用iteratee函数,然后删除重复元素。
+- **UniqueBy** : 对切片的每个元素调用 iteratee 函数,然后删除重复元素。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#UniqueBy)]
[[play](https://go.dev/play/p/UR323iZLDpv)]
- **Union** : 合并多个切片。
@@ -1016,10 +1017,9 @@ import "github.com/duke-git/lancet/v2/slice"
- **Without** : 创建一个不包括所有给定值的切片。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#Without)]
[[play](https://go.dev/play/p/bwhEXEypThg)]
-- **KeyBy** :将切片每个元素调用函数后转为map。
+- **KeyBy** :将切片每个元素调用函数后转为 map。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/slice_zh-CN.md#KeyBy)]
[[play](https://go.dev/play/p/uXod2LWD1Kg)]
-
### 17. strutil 包含字符串处理的相关函数。
@@ -1062,8 +1062,9 @@ import "github.com/duke-git/lancet/v2/strutil"
- **UpperFirst** : 将字符串的第一个字符转换为大写形式。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#UpperFirst)]
[[play](https://go.dev/play/p/sBbBxRbs8MM)]
-- **Pad** : 如果字符串长度短于size,则在左右两侧填充字符串。
+- **Pad** : 如果字符串长度短于 size,则在左右两侧填充字符串。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#Pad)]
+ [[play](https://go.dev/play/p/NzImQq-VF8q)]
- **PadEnd** : 如果字符串短于限制大小,则在右侧用给定字符填充字符串。 如果填充字符超出大小,它们将被截断。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#PadEnd)]
[[play](https://go.dev/play/p/9xP8rN0vz--)]
@@ -1093,8 +1094,11 @@ import "github.com/duke-git/lancet/v2/strutil"
[[play](https://go.dev/play/p/Ec2q4BzCpG-)]
- **SplitWords** : 将字符串拆分为单词,只支持字母字符单词。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#SplitWords)]
+ [[play](https://go.dev/play/p/KLiX4WiysMM)]
- **WordCount** : 返回有意义单词的数量,只支持字母字符单词。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/strutil_zh-CN.md#WordCount)]
+ [[play](https://go.dev/play/p/bj7_odx3vRf)]
+
### 18. system 包含 os, runtime, shell command 的相关函数。
@@ -1161,7 +1165,7 @@ import "github.com/duke-git/lancet/v2/validator"
- **IsAllLower** : 验证字符串是否全是小写英文字母。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsAllLower)]
[[play](https://go.dev/play/p/GjqCnOfV6cM)]
-- **IsBase64** : 验证字符串是否是base64编码。
+- **IsBase64** : 验证字符串是否是 base64 编码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsBase64)]
[[play](https://go.dev/play/p/sWHEySAt6hl)]
- **IsChineseMobile** : 验证字符串是否是中国手机号码。
@@ -1176,7 +1180,7 @@ import "github.com/duke-git/lancet/v2/validator"
- **IsCreditCard** : 验证字符串是否是信用卡号码。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsCreditCard)]
[[play](https://go.dev/play/p/sNwwL6B0-v4)]
-- **IsDns** : 验证字符串是否是有效dns。
+- **IsDns** : 验证字符串是否是有效 dns。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsDns)]
[[play](https://go.dev/play/p/jlYApVLLGTZ)]
- **IsEmail** : 验证字符串是否是有效电子邮件地址。
@@ -1191,7 +1195,7 @@ import "github.com/duke-git/lancet/v2/validator"
- **IsNumberStr** : 验证字符串是否是可以转换为数字。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsNumberStr)]
[[play](https://go.dev/play/p/LzaKocSV79u)]
-- **IsJSON** : 验证字符串是否是有效json。
+- **IsJSON** : 验证字符串是否是有效 json。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsJSON)]
[[play](https://go.dev/play/p/sRS6c4K8jGk)]
- **IsRegexMatch** : 验证字符串是否可以匹配正则表达式。
@@ -1200,19 +1204,19 @@ import "github.com/duke-git/lancet/v2/validator"
- **IsIntStr** : 验证字符串是否是可以转换为整数。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIntStr)]
[[play](https://go.dev/play/p/jQRtFv-a0Rk)]
-- **IsIp** : 验证字符串是否是ip地址。
+- **IsIp** : 验证字符串是否是 ip 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIp)]
[[play](https://go.dev/play/p/FgcplDvmxoD)]
-- **IsIpV4** : 验证字符串是否是ipv4地址。
+- **IsIpV4** : 验证字符串是否是 ipv4 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIpV4)]
[[play](https://go.dev/play/p/zBGT99EjaIu)]
-- **IsIpV6** : 验证字符串是否是ipv6地址。
+- **IsIpV6** : 验证字符串是否是 ipv6 地址。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsIpV6)]
[[play](https://go.dev/play/p/AHA0r0AzIdC)]
- **IsStrongPassword** : 验证字符串是否是强密码:(字母+数字+特殊字符)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsStrongPassword)]
[[play](https://go.dev/play/p/QHdVcSQ3uDg)]
-- **IsUrl** : 验证字符串是否是url。
+- **IsUrl** : 验证字符串是否是 url。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsUrl)]
[[play](https://go.dev/play/p/pbJGa7F98Ka)]
- **IsWeakPassword** : 验证字符串是否是弱密码(只包含字母+数字)。
@@ -1221,10 +1225,9 @@ import "github.com/duke-git/lancet/v2/validator"
- **IsZeroValue** : 判断传入的参数值是否为零值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsZeroValue)]
[[play](https://go.dev/play/p/UMrwaDCi_t4)]
-- **IsGBK** : 检查数据编码是否为gbk(汉字内部代码扩展规范)。
+- **IsGBK** : 检查数据编码是否为 gbk(汉字内部代码扩展规范)。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/validator_zh-CN.md#IsGBK)]
[[play](https://go.dev/play/p/E2nt3unlmzP)]
-
### 20. xerror 包实现一些错误处理函数
@@ -1234,46 +1237,45 @@ import "github.com/duke-git/lancet/v2/xerror"
#### 函数列表:
-- **New** : 创建XError对象实例。
+- **New** : 创建 XError 对象实例。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#New)]
[[play](https://go.dev/play/p/w4oWZts7q7f)]
-- **Wrap** : 根据error对象创建XError对象实例,可添加message。
+- **Wrap** : 根据 error 对象创建 XError 对象实例,可添加 message。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#Wrap)]
[[play](https://go.dev/play/p/5385qT2dCi4)]
-- **Unwrap** : 从error对象中解构出XError。
+- **Unwrap** : 从 error 对象中解构出 XError。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#Unwrap)]
[[play](https://go.dev/play/p/LKMLep723tu)]
-- **XError_Wrap** : 创建新的XError对象并将消息和id复制到新的对象中。
+- **XError_Wrap** : 创建新的 XError 对象并将消息和 id 复制到新的对象中。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Wrap)]
[[play](https://go.dev/play/p/5385qT2dCi4)]
-- **XError_Unwrap** : 解构XEerror为error对象。适配github.com/pkg/errors。
+- **XError_Unwrap** : 解构 XEerror 为 error 对象。适配 github.com/pkg/errors。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Unwrap)]
[[play](https://go.dev/play/p/VUXJ8BST4c6)]
-- **XError_With** : 添加与XError对象的键和值。
+- **XError_With** : 添加与 XError 对象的键和值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_With)]
[[play](https://go.dev/play/p/ow8UISXX_Dp)]
-- **XError_Id** : 设置XError对象的id。
+- **XError_Id** : 设置 XError 对象的 id。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Id)]
[[play](https://go.dev/play/p/X6HBlsy58U9)]
-- **XError_Is** : 检查目标error是否为XError,两个错误中的error.id是否匹配。
+- **XError_Is** : 检查目标 error 是否为 XError,两个错误中的 error.id 是否匹配。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Is)]
[[play](https://go.dev/play/p/X6HBlsy58U9)]
-- **XError_Values** : 返回由With设置的键和值的映射。将合并所有XError键和值。
+- **XError_Values** : 返回由 With 设置的键和值的映射。将合并所有 XError 键和值。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Values)]
[[play](https://go.dev/play/p/ow8UISXX_Dp)]
-- **XError_StackTrace** : 返回与pkg/error兼容的堆栈信息。
+- **XError_StackTrace** : 返回与 pkg/error 兼容的堆栈信息。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_StackTrace)]
[[play](https://go.dev/play/p/6FAvSQpa7pc)]
-- **XError_Info** : 返回可打印的XError对象信息。
+- **XError_Info** : 返回可打印的 XError 对象信息。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Info)]
[[play](https://go.dev/play/p/1ZX0ME1F-Jb)]
-- **XError_Error** : 实现标准库的error接口。
+- **XError_Error** : 实现标准库的 error 接口。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#XError_Error)]
[[play](https://go.dev/play/p/w4oWZts7q7f)]
-- **TryUnwrap** : 检查error, 如果err为nil则展开,则它返回一个有效值,如果err不是nil则Unwrap使用err发生panic。
+- **TryUnwrap** : 检查 error, 如果 err 为 nil 则展开,则它返回一个有效值,如果 err 不是 nil 则 Unwrap 使用 err 发生 panic。
[[doc](https://github.com/duke-git/lancet/blob/main/docs/xerror_zh-CN.md#TryUnwrap)]
[[play](https://go.dev/play/p/acyZVkNZEeW)]
-
## 如何贡献代码
diff --git a/convertor/convertor.go b/convertor/convertor.go
index 5b995ea..7df9458 100644
--- a/convertor/convertor.go
+++ b/convertor/convertor.go
@@ -343,7 +343,7 @@ func DeepClone[T any](src T) T {
}
// CopyProperties copies each field from the source into the destination. It recursively copies struct pointers and interfaces that contain struct pointers.
-// Play: todo
+// Play: https://go.dev/play/p/FOVY3XJL-6B
func CopyProperties[T, U any](dst T, src U) (err error) {
defer func() {
if e := recover(); e != nil {
diff --git a/maputil/map.go b/maputil/map.go
index 16e3976..c1fd3e9 100644
--- a/maputil/map.go
+++ b/maputil/map.go
@@ -39,7 +39,7 @@ func Values[K comparable, V any](m map[K]V) []V {
}
// KeysBy creates a slice whose element is the result of function mapper invoked by every map's key.
-// Play: todo
+// Play: https://go.dev/play/p/hI371iB8Up8
func KeysBy[K comparable, V any, T any](m map[K]V, mapper func(item K) T) []T {
keys := make([]T, 0, len(m))
@@ -51,7 +51,7 @@ func KeysBy[K comparable, V any, T any](m map[K]V, mapper func(item K) T) []T {
}
// ValuesBy creates a slice whose element is the result of function mapper invoked by every map's value.
-// Play: todo
+// Play: https://go.dev/play/p/sg9-oRidh8f
func ValuesBy[K comparable, V any, T any](m map[K]V, mapper func(item V) T) []T {
keys := make([]T, 0, len(m))
@@ -98,7 +98,7 @@ func Filter[K comparable, V any](m map[K]V, predicate func(key K, value V) bool)
}
// FilterByKeys iterates over map, return a new map whose keys are all given keys.
-// Play: todo
+// Play: https://go.dev/play/p/7ov6BJHbVqh
func FilterByKeys[K comparable, V any](m map[K]V, keys []K) map[K]V {
result := make(map[K]V)
@@ -111,7 +111,7 @@ func FilterByKeys[K comparable, V any](m map[K]V, keys []K) map[K]V {
}
// FilterByValues iterates over map, return a new map whose values are all given values.
-// Play: todo
+// Play: https://go.dev/play/p/P3-9MdcXegR
func FilterByValues[K comparable, V comparable](m map[K]V, values []V) map[K]V {
result := make(map[K]V)
@@ -124,7 +124,7 @@ func FilterByValues[K comparable, V comparable](m map[K]V, values []V) map[K]V {
}
// OmitBy is the opposite of Filter, removes all the map elements for which the predicate function returns true.
-// Play: todo
+// Play: https://go.dev/play/p/YJM4Hj5hNwm
func OmitBy[K comparable, V any](m map[K]V, predicate func(key K, value V) bool) map[K]V {
result := make(map[K]V)
@@ -137,7 +137,7 @@ func OmitBy[K comparable, V any](m map[K]V, predicate func(key K, value V) bool)
}
// OmitByKeys the opposite of FilterByKeys, extracts all the map elements which keys are not omitted.
-// Play: todo
+// Play: https://go.dev/play/p/jXGrWDBfSRp
func OmitByKeys[K comparable, V any](m map[K]V, keys []K) map[K]V {
result := make(map[K]V)
@@ -150,7 +150,7 @@ func OmitByKeys[K comparable, V any](m map[K]V, keys []K) map[K]V {
}
// OmitByValues the opposite of FilterByValues. remov all elements whose value are in the give slice.
-// Play: todo
+// Play: https://go.dev/play/p/XB7Y10uw20_U
func OmitByValues[K comparable, V comparable](m map[K]V, values []V) map[K]V {
result := make(map[K]V)
@@ -227,7 +227,7 @@ type Entry[K comparable, V any] struct {
}
// Entries transforms a map into array of key/value pairs.
-// Play: todo
+// Play: https://go.dev/play/p/Ltb11LNcElY
func Entries[K comparable, V any](m map[K]V) []Entry[K, V] {
entries := make([]Entry[K, V], 0, len(m))
@@ -242,7 +242,7 @@ func Entries[K comparable, V any](m map[K]V) []Entry[K, V] {
}
// FromEntries creates a map based on a slice of key/value pairs
-// Play: todo
+// Play: https://go.dev/play/p/fTdu4sCNjQO
func FromEntries[K comparable, V any](entries []Entry[K, V]) map[K]V {
result := make(map[K]V, len(entries))
@@ -254,7 +254,7 @@ func FromEntries[K comparable, V any](entries []Entry[K, V]) map[K]V {
}
// Transform a map to another type map.
-// Play: todo
+// Play: https://go.dev/play/p/P6ovfToM3zj
func Transform[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1, iteratee func(key K1, value V1) (K2, V2)) map[K2]V2 {
result := make(map[K2]V2, len(m))
@@ -267,7 +267,7 @@ func Transform[K1 comparable, V1 any, K2 comparable, V2 any](m map[K1]V1, iterat
}
// MapKeys transforms a map to other type map by manipulating it's keys.
-// Play: todo
+// Play: https://go.dev/play/p/8scDxWeBDKd
func MapKeys[K comparable, V any, T comparable](m map[K]V, iteratee func(key K, value V) T) map[T]V {
result := make(map[T]V, len(m))
@@ -279,7 +279,7 @@ func MapKeys[K comparable, V any, T comparable](m map[K]V, iteratee func(key K,
}
// MapValues transforms a map to other type map by manipulating it's values.
-// Play: todo
+// Play: https://go.dev/play/p/g92aY3fc7Iw
func MapValues[K comparable, V any, T any](m map[K]V, iteratee func(key K, value V) T) map[K]T {
result := make(map[K]T, len(m))
diff --git a/slice/slice.go b/slice/slice.go
index 98c79a6..9585941 100644
--- a/slice/slice.go
+++ b/slice/slice.go
@@ -22,7 +22,7 @@ var (
)
// Contain check if the target value is in the slice or not.
-// Play: todo
+// Play: https://go.dev/play/p/_454yEHcNjf
func Contain[T comparable](slice []T, target T) bool {
for _, item := range slice {
if item == target {
@@ -34,6 +34,7 @@ func Contain[T comparable](slice []T, target T) bool {
}
// ContainBy returns true if predicate function return true.
+// Play: https://go.dev/play/p/49tkHfX4GNc
func ContainBy[T any](slice []T, predicate func(item T) bool) bool {
for _, item := range slice {
if predicate(item) {
@@ -436,7 +437,7 @@ func Map[T any, U any](slice []T, iteratee func(index int, item T) U) []U {
// iteratee callback function should returntwo values:
// 1, mapping result.
// 2, whether the result element should be included or not
-// Play: todo
+// Play: https://go.dev/play/p/J94SZ_9MiIe
func FilterMap[T any, U any](slice []T, iteratee func(index int, item T) (U, bool)) []U {
result := []U{}
@@ -450,7 +451,7 @@ func FilterMap[T any, U any](slice []T, iteratee func(index int, item T) (U, boo
}
// FlatMap manipulates a slice and transforms and flattens it to a slice of another type.
-// Play: todo
+// Play: https://go.dev/play/p/_QARWlWs1N_F
func FlatMap[T any, U any](slice []T, iteratee func(index int, item T) []U) []U {
result := make([]U, 0, len(slice))
diff --git a/strutil/string.go b/strutil/string.go
index ebeacd6..19b7861 100644
--- a/strutil/string.go
+++ b/strutil/string.go
@@ -69,7 +69,7 @@ func LowerFirst(s string) string {
// PadStart pads string on the left and right side if it's shorter than size.
// Padding characters are truncated if they exceed size.
-// Play: todo
+// Play: https://go.dev/play/p/NzImQq-VF8q
func Pad(source string, size int, padStr string) string {
return padAtPosition(source, size, padStr, 0)
}
@@ -289,7 +289,7 @@ func Substring(s string, offset int, length uint) string {
}
// SplitWords splits a string into words, word only contains alphabetic characters.
-// Play: todo
+// Play: https://go.dev/play/p/KLiX4WiysMM
func SplitWords(s string) []string {
var word string
var words []string
@@ -331,7 +331,7 @@ func SplitWords(s string) []string {
}
// WordCount return the number of meaningful word, word only contains alphabetic characters.
-// Play: todo
+// Play: https://go.dev/play/p/bj7_odx3vRf
func WordCount(s string) int {
var r rune
var size, count int