mirror of
https://github.com/duke-git/lancet.git
synced 2026-03-01 00:35:28 +08:00
Compare commits
3 Commits
995ffb799f
...
ecafed511c
| Author | SHA1 | Date | |
|---|---|---|---|
| ecafed511c | |||
| 4ffff0e3f3 | |||
| 8ebb8a028e |
@@ -4,7 +4,7 @@
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
|
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
|
||||||
[](https://goreportcard.com/report/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://github.com/duke-git/lancet/actions/workflows/codecov.yml)
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
||||||
```
|
```
|
||||||
|
|
||||||
2. <b>For users who use version below go1.18, you should install v1.x.x. The latest of v1.x.x is v1.4.4. </b>
|
2. <b>For users who use version below go1.18, you should install v1.x.x. The latest of v1.x.x is v1.4.5. </b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
||||||
@@ -321,12 +321,19 @@ import "github.com/duke-git/lancet/v2/convertor"
|
|||||||
[[play](https://go.dev/play/p/OphmHCN_9u8)]
|
[[play](https://go.dev/play/p/OphmHCN_9u8)]
|
||||||
- **<big>ToStdBase64</big>** : converts a value to a string encoded in standard Base64.
|
- **<big>ToStdBase64</big>** : converts a value to a string encoded in standard Base64.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToStdBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToStdBase64)]
|
||||||
|
[[play](https://go.dev/play/p/_fLJqJD3NMo)]
|
||||||
- **<big>ToUrlBase64</big>** : converts a value to a string encoded in url Base64.
|
- **<big>ToUrlBase64</big>** : converts a value to a string encoded in url Base64.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToUrlBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToUrlBase64)]
|
||||||
|
[[play](https://go.dev/play/p/C_d0GlvEeUR)]
|
||||||
- **<big>ToRawStdBase64</big>** : converts a value to a string encoded in raw standard Base64.
|
- **<big>ToRawStdBase64</big>** : converts a value to a string encoded in raw standard Base64.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToRawStdBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToRawStdBase64)]
|
||||||
|
[[play](https://go.dev/play/p/wSAr3sfkDcv)]
|
||||||
- **<big>ToRawUrlBase64</big>** : converts a value to a string encoded in raw url Base64.
|
- **<big>ToRawUrlBase64</big>** : converts a value to a string encoded in raw url Base64.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToRawUrlBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToRawUrlBase64)]
|
||||||
|
[[play](https://go.dev/play/p/HwdDPFcza1O)]
|
||||||
|
- **<big>ToBigInt</big>** : converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToBigInt)]
|
||||||
|
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
||||||
|
|
||||||
<h3 id="cryptor"> 6. Cryptor package is for data encryption and decryption. <a href="#index">index</a></h3>
|
<h3 id="cryptor"> 6. Cryptor package is for data encryption and decryption. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -462,10 +469,10 @@ import "github.com/duke-git/lancet/v2/cryptor"
|
|||||||
[[play](https://go.dev/play/p/zutRHrDqs0X)]
|
[[play](https://go.dev/play/p/zutRHrDqs0X)]
|
||||||
- **<big>RsaEncrypt</big>** : encrypt data with ras algorithm.
|
- **<big>RsaEncrypt</big>** : encrypt data with ras algorithm.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaEncrypt)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaEncrypt)]
|
||||||
[[play](https://go.dev/play/p/uef0q1fz53I)]
|
[[play](https://go.dev/play/p/7_zo6mrx-eX)]
|
||||||
- **<big>RsaDecrypt</big>** : decrypt data with ras algorithm.
|
- **<big>RsaDecrypt</big>** : decrypt data with ras algorithm.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaDecrypt)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaDecrypt)]
|
||||||
[[play](https://go.dev/play/p/uef0q1fz53I)]
|
[[play](https://go.dev/play/p/7_zo6mrx-eX)]
|
||||||
- **<big>GenerateRsaKeyPair</big>** : creates rsa private and public key.
|
- **<big>GenerateRsaKeyPair</big>** : creates rsa private and public key.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#GenerateRsaKeyPair)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#GenerateRsaKeyPair)]
|
||||||
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
||||||
@@ -475,7 +482,12 @@ import "github.com/duke-git/lancet/v2/cryptor"
|
|||||||
- **<big>RsaDecryptOAEP</big>** : decrypts the data with RSA-OAEP
|
- **<big>RsaDecryptOAEP</big>** : decrypts the data with RSA-OAEP
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaDecryptOAEP)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaDecryptOAEP)]
|
||||||
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
||||||
|
- **<big>RsaSign</big>** : signs the data with RSA.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaSign)]
|
||||||
|
[[play](https://go.dev/play/p/qhsbf8BJ6Mf)]
|
||||||
|
- **<big>RsaVerifySign</big>** : verifies the signature of the data with RSA.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/cryptor.md#RsaVerifySign)]
|
||||||
|
[[play](https://go.dev/play/p/qhsbf8BJ6Mf)]
|
||||||
|
|
||||||
<h3 id="datetime"> 7. Datetime package supports date and time format and compare. <a href="#index">index</a></h3>
|
<h3 id="datetime"> 7. Datetime package supports date and time format and compare. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -619,7 +631,15 @@ import "github.com/duke-git/lancet/v2/datetime"
|
|||||||
- **<big>GenerateDatetimesBetween</big>** : returns a slice of strings between two times.
|
- **<big>GenerateDatetimesBetween</big>** : returns a slice of strings between two times.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datetime.md#GenerateDatetimesBetween)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datetime.md#GenerateDatetimesBetween)]
|
||||||
[[play](https://go.dev/play/p/6kHBpAxD9ZC)]
|
[[play](https://go.dev/play/p/6kHBpAxD9ZC)]
|
||||||
|
- **<big>Min</big>** : returns the earliest time among the given times.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datetime.md#Min)]
|
||||||
|
[[play](https://go.dev/play/p/MCIDvHNOGGb)]
|
||||||
|
- **<big>Max</big>** : returns the latest time among the given times.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datetime.md#Max)]
|
||||||
|
[[play](https://go.dev/play/p/9m6JMk1LB7-)]
|
||||||
|
- **<big>MaxMin</big>** : returns the latest and earliest time among the given times.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datetime.md#MaxMin)]
|
||||||
|
[[play](https://go.dev/play/p/rbW51cDtM_2)]
|
||||||
|
|
||||||
<h3 id="datastructure"> 8. Datastructure package contains some common data structure. eg. list, linklist, stack, queue, set, tree, graph. <a href="#index">index</a></h3>
|
<h3 id="datastructure"> 8. Datastructure package contains some common data structure. eg. list, linklist, stack, queue, set, tree, graph. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -755,6 +775,9 @@ import "github.com/duke-git/lancet/v2/fileutil"
|
|||||||
- **<big>ParallelChunkRead</big>** : reads the file in parallel and send each chunk of lines to the specified channel.
|
- **<big>ParallelChunkRead</big>** : reads the file in parallel and send each chunk of lines to the specified channel.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#ParallelChunkRead)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#ParallelChunkRead)]
|
||||||
[[play](https://go.dev/play/p/teMXnCsdSEw)]
|
[[play](https://go.dev/play/p/teMXnCsdSEw)]
|
||||||
|
- **<big>GetExeOrDllVersion</big>** : Get the version of exe or dll file on windows os.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#GetExeOrDllVersion)]
|
||||||
|
[[play](https://go.dev/play/p/iLRrDBhE38E)]
|
||||||
|
|
||||||
<h3 id="formatter"> 10. Formatter contains some functions for data formatting. <a href="#index">index</a></h3>
|
<h3 id="formatter"> 10. Formatter contains some functions for data formatting. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1120,7 +1143,18 @@ import "github.com/duke-git/lancet/v2/mathutil"
|
|||||||
- **<big>Div</big>** : returns the result of x divided by y.
|
- **<big>Div</big>** : returns the result of x divided by y.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#Div)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#Div)]
|
||||||
[[play](https://go.dev/play/p/WLxDdGXXYat)]
|
[[play](https://go.dev/play/p/WLxDdGXXYat)]
|
||||||
|
- **<big>Variance</big>** : returns the variance of numbers.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#Variance)]
|
||||||
|
[[play](https://go.dev/play/p/uHuV4YgXf8F)]
|
||||||
|
- **<big>StdDev</big>** : returns the standard deviation of numbers.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#StdDev)]
|
||||||
|
[[play](https://go.dev/play/p/FkNZDXvHD2l)]
|
||||||
|
- **<big>Permutation</big>** : calculates P(n, k).
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#Permutation)]
|
||||||
|
[[play](https://go.dev/play/p/MgobwH_FOxj)]
|
||||||
|
- **<big>Combination</big>** : calculates C(n, k).
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/mathutil.md#Combination)]
|
||||||
|
[[play](https://go.dev/play/p/ENFQRDQUFi9)]
|
||||||
|
|
||||||
<h3 id="netutil"> 14. Netutil package contains functions to get net information and send http request. <a href="#index">index</a></h3>
|
<h3 id="netutil"> 14. Netutil package contains functions to get net information and send http request. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1281,7 +1315,9 @@ import "github.com/duke-git/lancet/v2/random"
|
|||||||
- **<big>RandSliceFromGivenSlice</big>** : generate a random slice of length num from given slice.
|
- **<big>RandSliceFromGivenSlice</big>** : generate a random slice of length num from given slice.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/random.md#RandSliceFromGivenSlice)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/random.md#RandSliceFromGivenSlice)]
|
||||||
[[play](https://go.dev/play/p/68UikN9d6VT)]
|
[[play](https://go.dev/play/p/68UikN9d6VT)]
|
||||||
|
- **<big>RandNumberOfLength</big>** : generates a random int number of specified length.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/random.md#RandNumberOfLength)]
|
||||||
|
[[play](https://go.dev/play/p/oyZbuV7bu7b)]
|
||||||
|
|
||||||
<h3 id="retry"> 17. Retry package is for executing a function repeatedly until it was successful or canceled by the context. <a href="#index">index</a></h3>
|
<h3 id="retry"> 17. Retry package is for executing a function repeatedly until it was successful or canceled by the context. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1575,7 +1611,12 @@ import "github.com/duke-git/lancet/v2/slice"
|
|||||||
- **<big>Frequency</big>** : counts the frequency of each element in the slice.
|
- **<big>Frequency</big>** : counts the frequency of each element in the slice.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/slice.md#Frequency)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/slice.md#Frequency)]
|
||||||
[[play](https://go.dev/play/p/CW3UVNdUZOq)]
|
[[play](https://go.dev/play/p/CW3UVNdUZOq)]
|
||||||
|
- **<big>JoinFunc</big>** : joins the slice elements into a single string with the given separator.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/slice.md#JoinFunc)]
|
||||||
|
[[play](https://go.dev/play/p/55ib3SB5fM2)]
|
||||||
|
- **<big>ConcatBy</big>** : concats the elements of a slice into a single value using the provided separator and connector function.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/slice.md#ConcatBy)]
|
||||||
|
[[play](https://go.dev/play/p/6QcUpcY4UMW)]
|
||||||
|
|
||||||
<h3 id="stream"> 19. Stream package implements a sequence of elements supporting sequential and operations. this package is an experiment to explore if stream in go can work as the way java does. its function is very limited. <a href="#index">index</a></h3>
|
<h3 id="stream"> 19. Stream package implements a sequence of elements supporting sequential and operations. this package is an experiment to explore if stream in go can work as the way java does. its function is very limited. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1666,6 +1707,12 @@ import "github.com/duke-git/lancet/v2/stream"
|
|||||||
- **<big>ToSlice</big>** : returns the elements in the stream.
|
- **<big>ToSlice</big>** : returns the elements in the stream.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/stream.md#ToSlice)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/stream.md#ToSlice)]
|
||||||
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
|
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
|
||||||
|
- **<big>IndexOf</big>** : returns the index of the first occurrence of the specified element in this stream.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/stream.md#IndexOf)]
|
||||||
|
[[play](https://go.dev/play/p/tBV5Nc-XDX2)]
|
||||||
|
- **<big>LastIndexOf</big>** : returns the index of the last occurrence of the specified element in this stream.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/stream.md#LastIndexOf)]
|
||||||
|
[[play](https://go.dev/play/p/CjeoNw2eac_G)]
|
||||||
|
|
||||||
<h3 id="structs"> 20. Structs package provides several high level functions to manipulate struct, tag, and field. <a href="#index">index</a></h3>
|
<h3 id="structs"> 20. Structs package provides several high level functions to manipulate struct, tag, and field. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1847,6 +1894,9 @@ import "github.com/duke-git/lancet/v2/strutil"
|
|||||||
- **<big>RegexMatchAllGroups</big>** : matches all subgroups in a string using a regular expression and returns the result.
|
- **<big>RegexMatchAllGroups</big>** : matches all subgroups in a string using a regular expression and returns the result.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/strutil.md#RegexMatchAllGroups)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/strutil.md#RegexMatchAllGroups)]
|
||||||
[[play](https://go.dev/play/p/JZiu0RXpgN-)]
|
[[play](https://go.dev/play/p/JZiu0RXpgN-)]
|
||||||
|
- **<big>ExtractContent</big>** : extracts the content between the start and end strings in the source string.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/strutil.md#ExtractContent)]
|
||||||
|
[[play](https://go.dev/play/p/Ay9UIk7Rum9)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="system"> 22. System package contain some functions about os, runtime, shell command. <a href="#index">index</a></h3>
|
<h3 id="system"> 22. System package contain some functions about os, runtime, shell command. <a href="#index">index</a></h3>
|
||||||
@@ -2197,6 +2247,9 @@ import "github.com/duke-git/lancet/v2/xerror"
|
|||||||
- **<big>TryUnwrap</big>** : check if err is nil then it returns a valid value. If err is not nil, TryUnwrap panics with err.
|
- **<big>TryUnwrap</big>** : check if err is nil then it returns a valid value. If err is not nil, TryUnwrap panics with err.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/xerror.md#TryUnwrap)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/xerror.md#TryUnwrap)]
|
||||||
[[play](https://go.dev/play/p/acyZVkNZEeW)]
|
[[play](https://go.dev/play/p/acyZVkNZEeW)]
|
||||||
|
- **<big>TryCatch</big>** : simple simulation of Java-style try-catch.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/xerror.md#TryCatch)]
|
||||||
|
[[play](https://go.dev/play/p/D5Mdb0mRj0P)]
|
||||||
|
|
||||||
## How to Contribute
|
## How to Contribute
|
||||||
|
|
||||||
|
|||||||
+62
-11
@@ -4,7 +4,7 @@
|
|||||||
<br/>
|
<br/>
|
||||||
|
|
||||||

|

|
||||||
[](https://github.com/duke-git/lancet/releases)
|
[](https://github.com/duke-git/lancet/releases)
|
||||||
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
|
[](https://pkg.go.dev/github.com/duke-git/lancet/v2)
|
||||||
[](https://goreportcard.com/report/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://github.com/duke-git/lancet/actions/workflows/codecov.yml)
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
|
go get github.com/duke-git/lancet/v2 //安装v2最新版本v2.x.x
|
||||||
```
|
```
|
||||||
|
|
||||||
2. <b>使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.4.4。</b>
|
2. <b>使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.4.5。</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
go get github.com/duke-git/lancet// 使用go1.18以下版本, 必须安装v1.x.x版本
|
go get github.com/duke-git/lancet// 使用go1.18以下版本, 必须安装v1.x.x版本
|
||||||
@@ -321,13 +321,19 @@ import "github.com/duke-git/lancet/v2/convertor"
|
|||||||
[[play](https://go.dev/play/p/OphmHCN_9u8)]
|
[[play](https://go.dev/play/p/OphmHCN_9u8)]
|
||||||
- **<big>ToStdBase64</big>** : 将值转换为StdBase64编码的字符串。
|
- **<big>ToStdBase64</big>** : 将值转换为StdBase64编码的字符串。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToStdBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToStdBase64)]
|
||||||
|
[[play](https://go.dev/play/p/_fLJqJD3NMo)]
|
||||||
- **<big>ToUrlBase64</big>** : 将值转换为url Base64编码的字符串。
|
- **<big>ToUrlBase64</big>** : 将值转换为url Base64编码的字符串。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToUrlBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToUrlBase64)]
|
||||||
|
[[play](https://go.dev/play/p/C_d0GlvEeUR)]
|
||||||
- **<big>ToRawStdBase64</big>** : 将值转换为RawStdBase64编码的字符串。
|
- **<big>ToRawStdBase64</big>** : 将值转换为RawStdBase64编码的字符串。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawStdBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawStdBase64)]
|
||||||
|
[[play](https://go.dev/play/p/wSAr3sfkDcv)]
|
||||||
- **<big>ToRawUrlBase64</big>** : 将值转换为RawUrlBase64编码的字符串。
|
- **<big>ToRawUrlBase64</big>** : 将值转换为RawUrlBase64编码的字符串。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawUrlBase64)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToRawUrlBase64)]
|
||||||
|
[[play](https://go.dev/play/p/HwdDPFcza1O)]
|
||||||
|
- **<big>ToBigInt</big>** : 将整数转为*big.Int。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToBigInt)]
|
||||||
|
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
||||||
|
|
||||||
<h3 id="cryptor"> 6. cryptor 加密包支持数据加密和解密,获取 md5,hash 值。支持 base64, md5, hmac, aes, des, rsa。 <a href="#index">回到目录</a></h3>
|
<h3 id="cryptor"> 6. cryptor 加密包支持数据加密和解密,获取 md5,hash 值。支持 base64, md5, hmac, aes, des, rsa。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -464,10 +470,10 @@ import "github.com/duke-git/lancet/v2/cryptor"
|
|||||||
[[play](https://go.dev/play/p/zutRHrDqs0X)]
|
[[play](https://go.dev/play/p/zutRHrDqs0X)]
|
||||||
- **<big>RsaEncrypt</big>** : 用公钥文件 ras 加密数据。
|
- **<big>RsaEncrypt</big>** : 用公钥文件 ras 加密数据。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaEncrypt)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaEncrypt)]
|
||||||
[[play](https://go.dev/play/p/uef0q1fz53I)]
|
[[play](https://go.dev/play/p/7_zo6mrx-eX)]
|
||||||
- **<big>RsaDecrypt</big>** : 用私钥文件 rsa 解密数据。
|
- **<big>RsaDecrypt</big>** : 用私钥文件 rsa 解密数据。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecrypt)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecrypt)]
|
||||||
[[play](https://go.dev/play/p/uef0q1fz53I)]
|
[[play](https://go.dev/play/p/7_zo6mrx-eX)]
|
||||||
- **<big>GenerateRsaKeyPair</big>** : 创建rsa公钥私钥和key。
|
- **<big>GenerateRsaKeyPair</big>** : 创建rsa公钥私钥和key。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#GenerateRsaKeyPair)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#GenerateRsaKeyPair)]
|
||||||
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
||||||
@@ -477,7 +483,12 @@ import "github.com/duke-git/lancet/v2/cryptor"
|
|||||||
- **<big>RsaDecryptOAEP</big>** : rsa OAEP解密。
|
- **<big>RsaDecryptOAEP</big>** : rsa OAEP解密。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecryptOAEP)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaDecryptOAEP)]
|
||||||
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
[[play](https://go.dev/play/p/sSVmkfENKMz)]
|
||||||
|
- **<big>RsaSign</big>** : 应用RSA算法签名数据。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaSign)]
|
||||||
|
[[play](https://go.dev/play/p/qhsbf8BJ6Mf)]
|
||||||
|
- **<big>RsaVerifySign</big>** : 验证数据的签名是否符合RSA算法。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/cryptor.md#RsaVerifySign)]
|
||||||
|
[[play](https://go.dev/play/p/qhsbf8BJ6Mf)]
|
||||||
|
|
||||||
<h3 id="datetime"> 7. datetime日期时间处理包,格式化日期,比较日期。 <a href="#index">回到目录</a></h3>
|
<h3 id="datetime"> 7. datetime日期时间处理包,格式化日期,比较日期。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -622,6 +633,15 @@ import "github.com/duke-git/lancet/v2/datetime"
|
|||||||
- **<big>GenerateDatetimesBetween</big>** : 生成从start到end的所有日期时间的字符串列表。
|
- **<big>GenerateDatetimesBetween</big>** : 生成从start到end的所有日期时间的字符串列表。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GenerateDatetimesBetween)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#GenerateDatetimesBetween)]
|
||||||
[[play](https://go.dev/play/p/6kHBpAxD9ZC)]
|
[[play](https://go.dev/play/p/6kHBpAxD9ZC)]
|
||||||
|
- **<big>Min</big>** : 返回最早时间。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#Min)]
|
||||||
|
[[play](https://go.dev/play/p/MCIDvHNOGGb)]
|
||||||
|
- **<big>Max</big>** : 返回最晚时间。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#Max)]
|
||||||
|
[[play](https://go.dev/play/p/9m6JMk1LB7-)]
|
||||||
|
- **<big>MaxMin</big>** : 返回最早和最晚时间。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#MaxMin)]
|
||||||
|
[[play](https://go.dev/play/p/rbW51cDtM_2)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="datastructure"> 8. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph。 <a href="#index">回到目录</a></h3>
|
<h3 id="datastructure"> 8. datastructure 包含一些普通的数据结构实现。例如:list, linklist, stack, queue, set, tree, graph。 <a href="#index">回到目录</a></h3>
|
||||||
@@ -754,7 +774,9 @@ import "github.com/duke-git/lancet/v2/fileutil"
|
|||||||
- **<big>ParallelChunkRead</big>** : 并行读取文件并将每个块的行发送到指定通道。
|
- **<big>ParallelChunkRead</big>** : 并行读取文件并将每个块的行发送到指定通道。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ParallelChunkRead)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ParallelChunkRead)]
|
||||||
[[play](https://go.dev/play/p/teMXnCsdSEw)]
|
[[play](https://go.dev/play/p/teMXnCsdSEw)]
|
||||||
|
- **<big>GetExeOrDllVersion</big>** : 返回exe,dll文件版本号(仅Window平台)。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#GetExeOrDllVersion)]
|
||||||
|
[[play](https://go.dev/play/p/iLRrDBhE38E)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="formatter"> 10. formatter 格式化器包含一些数据格式化处理方法。 <a href="#index">回到目录</a></h3>
|
<h3 id="formatter"> 10. formatter 格式化器包含一些数据格式化处理方法。 <a href="#index">回到目录</a></h3>
|
||||||
@@ -1121,7 +1143,18 @@ import "github.com/duke-git/lancet/v2/mathutil"
|
|||||||
- **<big>Div</big>** : 除法运算。
|
- **<big>Div</big>** : 除法运算。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Div)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Div)]
|
||||||
[[play](https://go.dev/play/p/WLxDdGXXYat)]
|
[[play](https://go.dev/play/p/WLxDdGXXYat)]
|
||||||
|
- **<big>Variance</big>** : 计算方差。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Variance)]
|
||||||
|
[[play](https://go.dev/play/p/uHuV4YgXf8F)]
|
||||||
|
- **<big>StdDev</big>** : 计算标准差。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#StdDev)]
|
||||||
|
[[play](https://go.dev/play/p/FkNZDXvHD2l)]
|
||||||
|
- **<big>Permutation</big>** : 计算排列数P(n, k)。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Permutation)]
|
||||||
|
[[play](https://go.dev/play/p/MgobwH_FOxj)]
|
||||||
|
- **<big>Combination</big>** : 计算组合数C(n, k)。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/mathutil.md#Combination)]
|
||||||
|
[[play](https://go.dev/play/p/ENFQRDQUFi9)]
|
||||||
|
|
||||||
<h3 id="netutil"> 14. netutil 网络包支持获取 ip 地址,发送 http 请求。 <a href="#index">回到目录</a></h3>
|
<h3 id="netutil"> 14. netutil 网络包支持获取 ip 地址,发送 http 请求。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1282,7 +1315,9 @@ import "github.com/duke-git/lancet/v2/random"
|
|||||||
- **<big>RandSliceFromGivenSlice</big>** : 从给定切片中生成长度为 num 的随机切片。
|
- **<big>RandSliceFromGivenSlice</big>** : 从给定切片中生成长度为 num 的随机切片。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandSliceFromGivenSlice)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandSliceFromGivenSlice)]
|
||||||
[[play](https://go.dev/play/p/68UikN9d6VT)]
|
[[play](https://go.dev/play/p/68UikN9d6VT)]
|
||||||
|
- **<big>RandNumberOfLength</big>** : 生成指定长度的随机数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/random.md#RandNumberOfLength)]
|
||||||
|
[[play](https://go.dev/play/p/oyZbuV7bu7b)]
|
||||||
|
|
||||||
<h3 id="retry"> 17. retry 重试执行函数直到函数运行成功或被 context cancel。 <a href="#index">回到目录</a></h3>
|
<h3 id="retry"> 17. retry 重试执行函数直到函数运行成功或被 context cancel。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1573,7 +1608,12 @@ import "github.com/duke-git/lancet/v2/slice"
|
|||||||
- **<big>Frequency</big>** : 计算切片中每个元素出现的频率。
|
- **<big>Frequency</big>** : 计算切片中每个元素出现的频率。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Frequency)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#Frequency)]
|
||||||
[[play](https://go.dev/play/p/CW3UVNdUZOq)]
|
[[play](https://go.dev/play/p/CW3UVNdUZOq)]
|
||||||
|
- **<big>JoinFunc</big>** : 将切片元素用给定的分隔符连接成一个单一的字符串。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#JoinFunc)]
|
||||||
|
[[play](https://go.dev/play/p/55ib3SB5fM2)]
|
||||||
|
- **<big>ConcatBy</big>** : 将切片中的元素连接成一个值,使用指定的分隔符和连接器函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/slice.md#ConcatBy)]
|
||||||
|
[[play](https://go.dev/play/p/6QcUpcY4UMW)]
|
||||||
|
|
||||||
<h3 id="stream"> 19. stream 流,该包仅验证简单的 stream 实现,功能有限。 <a href="#index">回到目录</a></h3>
|
<h3 id="stream"> 19. stream 流,该包仅验证简单的 stream 实现,功能有限。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1664,7 +1704,12 @@ import "github.com/duke-git/lancet/v2/stream"
|
|||||||
- **<big>ToSlice</big>** : 返回 stream 中的元素切片。
|
- **<big>ToSlice</big>** : 返回 stream 中的元素切片。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#ToSlice)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#ToSlice)]
|
||||||
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
|
[[play](https://go.dev/play/p/jI6_iZZuVFE)]
|
||||||
|
- **<big>IndexOf</big>** : 返回在stream中找到值的第一个匹配项的索引,如果找不到值,则返回-1。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#IndexOf)]
|
||||||
|
[[play](https://go.dev/play/p/tBV5Nc-XDX2)]
|
||||||
|
- **<big>LastIndexOf</big>** : 返回在stream中找到值的最后一个匹配项的索引,如果找不到值,则返回-1。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/stream.md#LastIndexOf)]
|
||||||
|
[[play](https://go.dev/play/p/CjeoNw2eac_G)]
|
||||||
|
|
||||||
<h3 id="structs"> 20. structs 提供操作 struct, tag, field 的相关函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="structs"> 20. structs 提供操作 struct, tag, field 的相关函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1849,6 +1894,9 @@ import "github.com/duke-git/lancet/v2/strutil"
|
|||||||
- **<big>RegexMatchAllGroups</big>** : 使用正则表达式匹配字符串中的所有子组并返回结果。
|
- **<big>RegexMatchAllGroups</big>** : 使用正则表达式匹配字符串中的所有子组并返回结果。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#RegexMatchAllGroups)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#RegexMatchAllGroups)]
|
||||||
[[play](https://go.dev/play/p/JZiu0RXpgN-)]
|
[[play](https://go.dev/play/p/JZiu0RXpgN-)]
|
||||||
|
- **<big>ExtractContent</big>** : 提取两个标记之间的内容。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#ExtractContent)]
|
||||||
|
[[play](https://go.dev/play/p/Ay9UIk7Rum9)]
|
||||||
|
|
||||||
<h3 id="system"> 22. system 包含 os, runtime, shell command 的相关函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="system"> 22. system 包含 os, runtime, shell command 的相关函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -2199,6 +2247,9 @@ import "github.com/duke-git/lancet/v2/xerror"
|
|||||||
- **<big>TryUnwrap</big>** : 检查error, 如果err为nil则展开,则它返回一个有效值,如果err不是nil则Unwrap使用err发生panic。
|
- **<big>TryUnwrap</big>** : 检查error, 如果err为nil则展开,则它返回一个有效值,如果err不是nil则Unwrap使用err发生panic。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#TryUnwrap)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#TryUnwrap)]
|
||||||
[[play](https://go.dev/play/p/acyZVkNZEeW)]
|
[[play](https://go.dev/play/p/acyZVkNZEeW)]
|
||||||
|
- **<big>TryCatch</big>** : 简单实现的java风格异常处理(try-catch-finally)。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/xerror.md#TryCatch)]
|
||||||
|
[[play](https://go.dev/play/p/D5Mdb0mRj0P)]
|
||||||
|
|
||||||
## 如何贡献代码
|
## 如何贡献代码
|
||||||
|
|
||||||
|
|||||||
@@ -143,12 +143,8 @@ func ToString(value any) string {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return string(b)
|
|
||||||
|
|
||||||
// todo: maybe we should't supprt other type conversion
|
return string(b)
|
||||||
// v := reflect.ValueOf(value)
|
|
||||||
// log.Panicf("Unsupported data type: %s ", v.String())
|
|
||||||
// return ""
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -486,7 +482,7 @@ func ToRawUrlBase64(value any) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ToBigInt converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int
|
// ToBigInt converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/X3itkCxwB_x
|
||||||
func ToBigInt[T any](v T) (*big.Int, error) {
|
func ToBigInt[T any](v T) (*big.Int, error) {
|
||||||
result := new(big.Int)
|
result := new(big.Int)
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -565,7 +565,7 @@ func GenerateRsaKey(keySize int, priKeyFile, pubKeyFile string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RsaEncrypt encrypt data with ras algorithm.
|
// RsaEncrypt encrypt data with ras algorithm.
|
||||||
// Play: https://go.dev/play/p/rDqTT01SPkZ
|
// Play: https://go.dev/play/p/7_zo6mrx-eX
|
||||||
func RsaEncrypt(data []byte, pubKeyFileName string) []byte {
|
func RsaEncrypt(data []byte, pubKeyFileName string) []byte {
|
||||||
file, err := os.Open(pubKeyFileName)
|
file, err := os.Open(pubKeyFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -600,7 +600,7 @@ func RsaEncrypt(data []byte, pubKeyFileName string) []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RsaDecrypt decrypt data with ras algorithm.
|
// RsaDecrypt decrypt data with ras algorithm.
|
||||||
// Play: https://go.dev/play/p/rDqTT01SPkZ
|
// Play: https://go.dev/play/p/7_zo6mrx-eX
|
||||||
func RsaDecrypt(data []byte, privateKeyFileName string) []byte {
|
func RsaDecrypt(data []byte, privateKeyFileName string) []byte {
|
||||||
file, err := os.Open(privateKeyFileName)
|
file, err := os.Open(privateKeyFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -663,7 +663,7 @@ func RsaDecryptOAEP(ciphertext []byte, label []byte, key rsa.PrivateKey) ([]byte
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RsaSign signs the data with RSA.
|
// RsaSign signs the data with RSA.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/qhsbf8BJ6Mf
|
||||||
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error) {
|
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error) {
|
||||||
privateKey, err := loadRasPrivateKey(privateKeyFileName)
|
privateKey, err := loadRasPrivateKey(privateKeyFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -679,7 +679,7 @@ func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RsaVerifySign verifies the signature of the data with RSA.
|
// RsaVerifySign verifies the signature of the data with RSA.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/qhsbf8BJ6Mf
|
||||||
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error {
|
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error {
|
||||||
publicKey, err := loadRsaPublicKey(pubKeyFileName)
|
publicKey, err := loadRsaPublicKey(pubKeyFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -712,7 +712,6 @@ func loadRsaPublicKey(filename string) (*rsa.PublicKey, error) {
|
|||||||
if blockType == "RSA PUBLIC KEY" {
|
if blockType == "RSA PUBLIC KEY" {
|
||||||
pubKey, err = x509.ParsePKCS1PublicKey(block.Bytes)
|
pubKey, err = x509.ParsePKCS1PublicKey(block.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// todo: here should be a bug, should return nil, err
|
|
||||||
key, err := x509.ParsePKIXPublicKey(block.Bytes)
|
key, err := x509.ParsePKIXPublicKey(block.Bytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
-----BEGIN rsa private key-----
|
||||||
|
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
|
||||||
|
-----END rsa private key-----
|
||||||
@@ -1,51 +1,51 @@
|
|||||||
-----BEGIN rsa private key-----
|
-----BEGIN rsa private key-----
|
||||||
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
|
||||||
-----END rsa private key-----
|
-----END rsa private key-----
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
-----BEGIN rsa public key-----
|
||||||
|
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5IqWfYbW1NlTDWE2plFW
|
||||||
|
qD6CTquA0Ar/1E66lY8OMtrdpxTmchirmoISWN0BD7r2tV9T/kHs44Sy3raAfkR5
|
||||||
|
ixYF5FRkb63FdIAtoynsxS6MEE26fgWuDAa1xwNt+t/uivnpfJk25htpBNkKGT8i
|
||||||
|
i0TPPLn1N15hMHenT6PzWVjGjQxWcp4dUA4gXTDuqaeu7Oy7Ku2yP90/ra+cjTV8
|
||||||
|
DnBJ9enQhAfu1LivJO3FgmXeuC3uqhhM3t9ZbNy7tvJI5PXDCaS8iesBvCp5carT
|
||||||
|
SXWLpFEgvIhXQIsXtxezKAP3gRd8r5JPQI9FZlxyUcyf+Htkn2A4qyKhFElnP1z9
|
||||||
|
j0YLFhL/gQMdtNIY7yhSb29PyuCG7noz25swrfxbA7ZVppM0J19JNhlpqmusBKLB
|
||||||
|
NqN+KMD8EDli7NLX17S9Dj2pQF9I8fVXPEhkdTb67rr7y3OUANKjh0Opnt3JLoj9
|
||||||
|
u1X7BfCeUSR/qq3E8RFPeyxvP1tc5QVqKBG6UPBo8nLQqdzJhUd8a1YEfXIUbdHL
|
||||||
|
s2q5WVFu2MDavIp634+fzfcIFRoBtdxf5aCdxLaLocsA/aLLyL1pK6K0rpdrSUtc
|
||||||
|
EBMST26qIlU0Ht+SQtaMdE2gyjkMM5RpLh1q/gpow+0j3zu6f5tDsu3qwgjLIx78
|
||||||
|
YCTGUuCpsVMzFK4tahYSPNkCAwEAAQ==
|
||||||
|
-----END rsa public key-----
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
-----BEGIN rsa public key-----
|
-----BEGIN rsa public key-----
|
||||||
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA66tu9qYNO0QeeeMaEJoh
|
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA00EXXa5qy/g4DLIedOhb
|
||||||
WeBS7KdPQwVFt+5+kRhPST+xI6A8TtfccOtZM4Zc7BnSfTTQvcvF6HhOOn+PDYoi
|
oYGZoS/S9B7qy5nHbxum6bt0Y+U5DheGNielHwDz3k2WJYk75KZI9eoDdC4d8C9d
|
||||||
Vr/2dK4yZHm7wH35riqtvv0TYVNTdeKDmW3vZy8SR7Cpedl5a+BEc7D1PBqHMwFn
|
gWuf1FQmIFu9OtjGiPt+WdYpKJUD1OXNiipx44xDsGYc4daBfLlNujhYQjWVfh7q
|
||||||
f/aJLY3AWp8VbHf0g1HcIL1xTXsFXFn283zUEHrg1XNmJlT0nLuKaBjIqGBqWZWI
|
y62jXbPfJJYC9VFNkg9T36ejzjpFiXSM678rdRq9lIcisY75ez1z6ksdnv8GetNJ
|
||||||
fCyOK5ZhhKP9vhRhY+u+/HQ1+CLw66qzAN6ZngR6Ra6B0bvx0D38Hy/FxLonDaut
|
pC7W/4Ij0vNndi9R2hlclV5+IxGu7nB5us13IwJSTnyKokS6Mjh/sLiHvF+7OUWR
|
||||||
ozd17C+zwQ6V5/PHLDRAqcZRvJUJ3E163gGEjBOTLU5T4FGxOaSBO4Dpw6J+wJRF
|
WlTs2qvBuTTk3F7zrzOHvBs+6b/nUBqMBKqhzTcjK2njg9DuQj3IhmyHgcYKWwC2
|
||||||
uOyq3fB6M62R5x66U53p3GlWpNWsYkN3mk3JfI0+xsbi/Ry5jhdXOHANrks7eoo8
|
KucsuUW/xbFQCceemHGzZ2kceDHYUNUg4UncWXKF466uS93y4fdUeFTe9ojyearY
|
||||||
SoAOEWidMZGRYpkiTkFgMHmjsrM5sUmsEpM+B93Kouij3CH3p9KAzfAz/I573pBz
|
w9Ip/9CA9ERq04h44KJA3HGVpCPxrk3pqM3gfzAR7T7gzZQjotPwuGrGT84jcOvc
|
||||||
3xuXDsbhlQIncRLOIFXP/VxU/IUsf81blhsWZ8ZQg1HyB7vWDyAR0BFuIKWDMlzn
|
CYRcJnIm/5xQaIT9N1iEkyDZaH0rXiFttn2zsNOTYuASj5Z+Y4AfH3+dBc1ebWjZ
|
||||||
M85kMoPpCpI1UUfOw1hLQwHRBuVIU8v+lgJhimHZtrDPEvOmXLTGBJLUePFEMI7l
|
UIurgq3JJUmplArD6k99Y3qH9nHArrRMRC7iyEsVwOWYMcadkF6l+pVYAXnxy6nA
|
||||||
bL9XQTkMBXRgJ7hjxfYutUv6WpoyYP/vfUq7GN6X4JQzgCd1timJc/ljqTDbzT5N
|
NMpwM5DOiKY4jhZ5QMyp1E4oQtGNlrV/mqdOHXM3Gb5Vclw0JiQ1LMOihoURliuh
|
||||||
Gxk8mhjoAhZFpRciSyt5+6MCAwEAAQ==
|
wxj4u6AJMnILHBGQQ5P3NQsCAwEAAQ==
|
||||||
-----END rsa public key-----
|
-----END rsa public key-----
|
||||||
|
|||||||
@@ -100,12 +100,6 @@ func TestBSTree_Delete(t *testing.T) {
|
|||||||
|
|
||||||
acturl1 := bstree.InOrderTraverse()
|
acturl1 := bstree.InOrderTraverse()
|
||||||
assert.Equal([]int{2, 5, 6, 7}, acturl1)
|
assert.Equal([]int{2, 5, 6, 7}, acturl1)
|
||||||
|
|
||||||
//todo
|
|
||||||
// bstree.DeletetNode(6, comparator)
|
|
||||||
// bstree.Print()
|
|
||||||
// acturl2 := bstree.InOrderTraverse()
|
|
||||||
// assert.Equal([]int{2, 5, 7}, acturl2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBSTree_Depth(t *testing.T) {
|
func TestBSTree_Depth(t *testing.T) {
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ func GenerateDatetimesBetween(start, end time.Time, layout string, interval stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Min returns the earliest time among the given times.
|
// Min returns the earliest time among the given times.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/MCIDvHNOGGb
|
||||||
func Min(t1 time.Time, times ...time.Time) time.Time {
|
func Min(t1 time.Time, times ...time.Time) time.Time {
|
||||||
minTime := t1
|
minTime := t1
|
||||||
|
|
||||||
@@ -459,7 +459,7 @@ func Min(t1 time.Time, times ...time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Max returns the latest time among the given times.
|
// Max returns the latest time among the given times.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/9m6JMk1LB7-
|
||||||
func Max(t1 time.Time, times ...time.Time) time.Time {
|
func Max(t1 time.Time, times ...time.Time) time.Time {
|
||||||
maxTime := t1
|
maxTime := t1
|
||||||
|
|
||||||
@@ -473,7 +473,7 @@ func Max(t1 time.Time, times ...time.Time) time.Time {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MaxMin returns the latest and earliest time among the given times.
|
// MaxMin returns the latest and earliest time among the given times.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/rbW51cDtM_2
|
||||||
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time) {
|
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time) {
|
||||||
maxTime = t1
|
maxTime = t1
|
||||||
minTime = t1
|
minTime = t1
|
||||||
|
|||||||
@@ -1155,7 +1155,7 @@ func main() {
|
|||||||
|
|
||||||
<p>将整数值转换为bigInt。</p>
|
<p>将整数值转换为bigInt。</p>
|
||||||
|
|
||||||
<b>函数签名:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>函数签名:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/X3itkCxwB_x)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func ToBigInt[T any](v T) (*big.Int, error)
|
func ToBigInt[T any](v T) (*big.Int, error)
|
||||||
|
|||||||
@@ -1436,7 +1436,7 @@ func main() {
|
|||||||
func RsaEncrypt(data []byte, pubKeyFileName string) []byte
|
func RsaEncrypt(data []byte, pubKeyFileName string) []byte
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/uef0q1fz53I)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/7_zo6mrx-eX)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1473,7 +1473,7 @@ func main() {
|
|||||||
func RsaDecrypt(data []byte, privateKeyFileName string) []byte
|
func RsaDecrypt(data []byte, privateKeyFileName string) []byte
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/uef0q1fz53I)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/7_zo6mrx-eX)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1621,7 +1621,7 @@ func main() {
|
|||||||
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error)
|
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/qhsbf8BJ6Mf)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1638,12 +1638,12 @@ func main() {
|
|||||||
privateKey := "./rsa_private.pem"
|
privateKey := "./rsa_private.pem"
|
||||||
publicKey := "./rsa_public.pem"
|
publicKey := "./rsa_public.pem"
|
||||||
|
|
||||||
signature, err := RsaSign(hash, data, privateKey)
|
signature, err := cryptor.RsaSign(hash, data, privateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = RsaVerifySign(hash, data, signature, publicKey)
|
err = cryptor.RsaVerifySign(hash, data, signature, publicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -1660,7 +1660,7 @@ func main() {
|
|||||||
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error
|
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/qhsbf8BJ6Mf)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1677,12 +1677,12 @@ func main() {
|
|||||||
privateKey := "./rsa_private.pem"
|
privateKey := "./rsa_private.pem"
|
||||||
publicKey := "./rsa_public.pem"
|
publicKey := "./rsa_public.pem"
|
||||||
|
|
||||||
signature, err := RsaSign(hash, data, privateKey)
|
signature, err := cryptor.RsaSign(hash, data, privateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = RsaVerifySign(hash, data, signature, publicKey)
|
err = cryptor.RsaVerifySign(hash, data, signature, publicKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1585,7 +1585,7 @@ func main() {
|
|||||||
func Min(t1 time.Time, times ...time.Time) time.Time
|
func Min(t1 time.Time, times ...time.Time) time.Time
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/MCIDvHNOGGb)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1615,7 +1615,7 @@ func main() {
|
|||||||
func Max(t1 time.Time, times ...time.Time) time.Time
|
func Max(t1 time.Time, times ...time.Time) time.Time
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/9m6JMk1LB7-)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1645,7 +1645,7 @@ func main() {
|
|||||||
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time)
|
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/rbW51cDtM_2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1088,7 +1088,7 @@ func main() {
|
|||||||
func GetExeOrDllVersion(filePath string) (string, error)
|
func GetExeOrDllVersion(filePath string) (string, error)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/iLRrDBhE38E)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1178,7 +1178,7 @@ func main() {
|
|||||||
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64
|
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[示例](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[示例](https://go.dev/play/p/uHuV4YgXf8F)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1211,7 +1211,7 @@ func main() {
|
|||||||
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64
|
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/FkNZDXvHD2l)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1222,8 +1222,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
result1 := mathutil.T运行cRound(mathutil.StdDev([]int{1, 2, 3, 4, 5}), 2)
|
result1 := mathutil.TruncRound(mathutil.StdDev([]int{1, 2, 3, 4, 5}), 2)
|
||||||
result2 := mathutil.T运行cRound(mathutil.StdDev([]float64{1.1, 2.2, 3.3, 4.4, 5.5}), 2)
|
result2 := mathutil.TruncRound(mathutil.StdDev([]float64{1.1, 2.2, 3.3, 4.4, 5.5}), 2)
|
||||||
|
|
||||||
fmt.Println(result1)
|
fmt.Println(result1)
|
||||||
fmt.Println(result2)
|
fmt.Println(result2)
|
||||||
@@ -1236,7 +1236,7 @@ func main() {
|
|||||||
|
|
||||||
### <span id="Permutation">Permutation</span>
|
### <span id="Permutation">Permutation</span>
|
||||||
|
|
||||||
<p>计算排列数(P(n, k))。</p>
|
<p>计算排列数P(n, k)。</p>
|
||||||
|
|
||||||
<b>函数签名:</b>
|
<b>函数签名:</b>
|
||||||
|
|
||||||
@@ -1244,7 +1244,7 @@ func main() {
|
|||||||
func Permutation(n, k uint) uint
|
func Permutation(n, k uint) uint
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/MgobwH_FOxj)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1269,7 +1269,7 @@ func main() {
|
|||||||
|
|
||||||
### <span id="Combination">Combination</span>
|
### <span id="Combination">Combination</span>
|
||||||
|
|
||||||
<p>计算组合数(C(n, k))。</p>
|
<p>计算组合数C(n, k)。</p>
|
||||||
|
|
||||||
<b>函数签名:</b>
|
<b>函数签名:</b>
|
||||||
|
|
||||||
@@ -1277,7 +1277,7 @@ func main() {
|
|||||||
func Combination(n, k uint) uint
|
func Combination(n, k uint) uint
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/ENFQRDQUFi9)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -526,7 +526,7 @@ func main() {
|
|||||||
```
|
```
|
||||||
### <span id="RandNumberOfLength">RandNumberOfLength</span>
|
### <span id="RandNumberOfLength">RandNumberOfLength</span>
|
||||||
|
|
||||||
<p>生成指定长度的随机数</p>
|
<p>生成指定长度的随机数。</p>
|
||||||
|
|
||||||
<b>函数签名:</b>
|
<b>函数签名:</b>
|
||||||
|
|
||||||
@@ -534,7 +534,7 @@ func main() {
|
|||||||
func RandNumberOfLength(len int) int
|
func RandNumberOfLength(len int) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>实例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>实例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/oyZbuV7bu7b)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -2999,7 +2999,7 @@ func main() {
|
|||||||
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string
|
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/55ib3SB5fM2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
@@ -3029,7 +3029,7 @@ func main() {
|
|||||||
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T
|
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/6QcUpcY4UMW)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -951,7 +951,7 @@ func main() {
|
|||||||
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int
|
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/tBV5Nc-XDX2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
@@ -984,7 +984,7 @@ func main() {
|
|||||||
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int
|
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/CjeoNw2eac_G)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -1741,7 +1741,7 @@ func main() {
|
|||||||
func ExtractContent(s, start, end string) []string
|
func ExtractContent(s, start, end string) []string
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/Ay9UIk7Rum9)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -509,7 +509,7 @@ func (tc *TryCatch) Finally(finallyFunc func(ctx context.Context)) *TryCatch
|
|||||||
func (tc *TryCatch) Do()
|
func (tc *TryCatch) Do()
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block">[运行](todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block">[运行](https://go.dev/play/p/D5Mdb0mRj0P)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -529,8 +529,6 @@ func main() {
|
|||||||
return errors.New("error in try block")
|
return errors.New("error in try block")
|
||||||
}).Catch(func(ctx context.Context, err error) {
|
}).Catch(func(ctx context.Context, err error) {
|
||||||
calledCatch = true
|
calledCatch = true
|
||||||
// Error in try block at /path/xxx.go:{line_number} - Cause: error message
|
|
||||||
// fmt.Println(err.Error())
|
|
||||||
}).Finally(func(ctx context.Context) {
|
}).Finally(func(ctx context.Context) {
|
||||||
calledFinally = true
|
calledFinally = true
|
||||||
}).Do()
|
}).Do()
|
||||||
|
|||||||
@@ -1123,7 +1123,7 @@ func main() {
|
|||||||
|
|
||||||
<p>Converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int</p>
|
<p>Converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int</p>
|
||||||
|
|
||||||
<b>Signature:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Signature:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/X3itkCxwB_x)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func ToBigInt[T any](v T) (*big.Int, error)
|
func ToBigInt[T any](v T) (*big.Int, error)
|
||||||
|
|||||||
@@ -1435,7 +1435,7 @@ func main() {
|
|||||||
func RsaEncrypt(data []byte, pubKeyFileName string) []byte
|
func RsaEncrypt(data []byte, pubKeyFileName string) []byte
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/uef0q1fz53I)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7_zo6mrx-eX)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1472,7 +1472,7 @@ func main() {
|
|||||||
func RsaDecrypt(data []byte, privateKeyFileName string) []byte
|
func RsaDecrypt(data []byte, privateKeyFileName string) []byte
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/uef0q1fz53I)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7_zo6mrx-eX)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1620,7 +1620,7 @@ func main() {
|
|||||||
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error)
|
func RsaSign(hash crypto.Hash, data []byte, privateKeyFileName string) ([]byte, error)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/qhsbf8BJ6Mf)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1659,7 +1659,7 @@ func main() {
|
|||||||
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error
|
func RsaVerifySign(hash crypto.Hash, data, signature []byte, pubKeyFileName string) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/qhsbf8BJ6Mf)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1586,7 +1586,7 @@ func main() {
|
|||||||
func Min(t1 time.Time, times ...time.Time) time.Time
|
func Min(t1 time.Time, times ...time.Time) time.Time
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/MCIDvHNOGGb)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1616,7 +1616,7 @@ func main() {
|
|||||||
func Max(t1 time.Time, times ...time.Time) time.Time
|
func Max(t1 time.Time, times ...time.Time) time.Time
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/9m6JMk1LB7-)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1646,7 +1646,7 @@ func main() {
|
|||||||
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time)
|
func MaxMin(t1 time.Time, times ...time.Time) (maxTime time.Time, minTime time.Time)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/rbW51cDtM_2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1087,7 +1087,7 @@ func main() {
|
|||||||
func GetExeOrDllVersion(filePath string) (string, error)
|
func GetExeOrDllVersion(filePath string) (string, error)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/iLRrDBhE38E)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -1177,7 +1177,7 @@ func main() {
|
|||||||
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64
|
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/uHuV4YgXf8F)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1210,7 +1210,7 @@ func main() {
|
|||||||
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64
|
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/FkNZDXvHD2l)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1243,7 +1243,7 @@ func main() {
|
|||||||
func Permutation(n, k uint) uint
|
func Permutation(n, k uint) uint
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/MgobwH_FOxj)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1276,7 +1276,7 @@ func main() {
|
|||||||
func Combination(n, k uint) uint
|
func Combination(n, k uint) uint
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/ENFQRDQUFi9)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -536,7 +536,7 @@ func main() {
|
|||||||
func RandNumberOfLength(len int) int
|
func RandNumberOfLength(len int) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Signature:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Signature:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/oyZbuV7bu7b)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -2995,7 +2995,7 @@ func main() {
|
|||||||
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string
|
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/55ib3SB5fM2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
@@ -3025,7 +3025,7 @@ func main() {
|
|||||||
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T
|
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/6QcUpcY4UMW)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -950,7 +950,7 @@ func main() {
|
|||||||
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int
|
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/tBV5Nc-XDX2)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
@@ -983,7 +983,7 @@ func main() {
|
|||||||
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int
|
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/CjeoNw2eac_G)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -1743,7 +1743,7 @@ func main() {
|
|||||||
func ExtractContent(s, start, end string) []string
|
func ExtractContent(s, start, end string) []string
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/Ay9UIk7Rum9)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
|
|||||||
@@ -507,7 +507,7 @@ func (tc *TryCatch) Finally(finallyFunc func(ctx context.Context)) *TryCatch
|
|||||||
func (tc *TryCatch) Do()
|
func (tc *TryCatch) Do()
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/D5Mdb0mRj0P)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ outline: deep
|
|||||||
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
||||||
```
|
```
|
||||||
|
|
||||||
2. <b>For users who use version below go1.18, you should install v1.x.x. The latest of v1.x.x is v1.4.4. </b>
|
2. <b>For users who use version below go1.18, you should install v1.x.x. The latest of v1.x.x is v1.4.5. </b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ outline: deep
|
|||||||
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
go get github.com/duke-git/lancet/v2 // will install latest version of v2.x.x
|
||||||
```
|
```
|
||||||
|
|
||||||
2. <b>使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.4.4。</b>
|
2. <b>使用 go1.18 以下版本的用户,必须安装 v1.x.x。目前最新的 v1 版本是 v1.4.5。</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
go get github.com/duke-git/lancet // below go1.18, install latest version of v1.x.x
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ type tagVS_FIXEDFILEINFO struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetExeOrDllVersion get the version of exe or dll file on windows.
|
// GetExeOrDllVersion get the version of exe or dll file on windows.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/iLRrDBhE38E
|
||||||
func GetExeOrDllVersion(filePath string) (string, error) {
|
func GetExeOrDllVersion(filePath string) (string, error) {
|
||||||
// 加载系统dll
|
// 加载系统dll
|
||||||
versionDLL := syscall.NewLazyDLL("version.dll")
|
versionDLL := syscall.NewLazyDLL("version.dll")
|
||||||
|
|||||||
@@ -400,7 +400,7 @@ func Div[T constraints.Float | constraints.Integer](x T, y T) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Variance returns the variance of numbers.
|
// Variance returns the variance of numbers.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/uHuV4YgXf8F
|
||||||
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64 {
|
func Variance[T constraints.Float | constraints.Integer](numbers []T) float64 {
|
||||||
n := len(numbers)
|
n := len(numbers)
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
@@ -418,13 +418,13 @@ func Variance[T constraints.Float | constraints.Integer](numbers []T) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StdDev returns the standard deviation of numbers.
|
// StdDev returns the standard deviation of numbers.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/FkNZDXvHD2l
|
||||||
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64 {
|
func StdDev[T constraints.Float | constraints.Integer](numbers []T) float64 {
|
||||||
return math.Sqrt(Variance(numbers))
|
return math.Sqrt(Variance(numbers))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Permutation calculate P(n, k).
|
// Permutation calculate P(n, k).
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/MgobwH_FOxj
|
||||||
func Permutation(n, k uint) uint {
|
func Permutation(n, k uint) uint {
|
||||||
if n < k {
|
if n < k {
|
||||||
return 0
|
return 0
|
||||||
@@ -437,7 +437,7 @@ func Permutation(n, k uint) uint {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Combination calculate C(n, k).
|
// Combination calculate C(n, k).
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/ENFQRDQUFi9
|
||||||
func Combination(n, k uint) uint {
|
func Combination(n, k uint) uint {
|
||||||
if n < k {
|
if n < k {
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
+1
-1
@@ -335,7 +335,7 @@ func UUIdV4() (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RandNumberOfLength 生成一个长度为len的随机数
|
// RandNumberOfLength 生成一个长度为len的随机数
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/oyZbuV7bu7b
|
||||||
func RandNumberOfLength(len int) int {
|
func RandNumberOfLength(len int) int {
|
||||||
m := int(math.Pow10(len) - 1)
|
m := int(math.Pow10(len) - 1)
|
||||||
i := int(math.Pow10(len - 1))
|
i := int(math.Pow10(len - 1))
|
||||||
|
|||||||
+2
-2
@@ -1415,7 +1415,7 @@ func Frequency[T comparable](slice []T) map[T]int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// JoinFunc joins the slice elements into a single string with the given separator.
|
// JoinFunc joins the slice elements into a single string with the given separator.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/55ib3SB5fM2
|
||||||
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string {
|
func JoinFunc[T any](slice []T, sep string, transform func(T) T) string {
|
||||||
var buf strings.Builder
|
var buf strings.Builder
|
||||||
for i, v := range slice {
|
for i, v := range slice {
|
||||||
@@ -1428,7 +1428,7 @@ func JoinFunc[T any](slice []T, sep string, transform func(T) T) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ConcatBy concats the elements of a slice into a single value using the provided separator and connector function.
|
// ConcatBy concats the elements of a slice into a single value using the provided separator and connector function.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/6QcUpcY4UMW
|
||||||
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T {
|
func ConcatBy[T any](slice []T, sep T, connector func(T, T) T) T {
|
||||||
var result T
|
var result T
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -130,7 +130,6 @@ func (s Stream[T]) Distinct() Stream[T] {
|
|||||||
distinct := map[string]bool{}
|
distinct := map[string]bool{}
|
||||||
|
|
||||||
for _, v := range s.source {
|
for _, v := range s.source {
|
||||||
// todo: performance issue
|
|
||||||
k := hashKey(v)
|
k := hashKey(v)
|
||||||
if _, ok := distinct[k]; !ok {
|
if _, ok := distinct[k]; !ok {
|
||||||
distinct[k] = true
|
distinct[k] = true
|
||||||
@@ -395,6 +394,7 @@ func (s Stream[T]) Min(less func(a, b T) bool) (T, bool) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IndexOf returns the index of the first occurrence of the specified element in this stream, or -1 if this stream does not contain the element.
|
// IndexOf returns the index of the first occurrence of the specified element in this stream, or -1 if this stream does not contain the element.
|
||||||
|
// Play: https://go.dev/play/p/tBV5Nc-XDX2
|
||||||
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int {
|
func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int {
|
||||||
for i, v := range s.source {
|
for i, v := range s.source {
|
||||||
if equal(v, target) {
|
if equal(v, target) {
|
||||||
@@ -405,6 +405,7 @@ func (s Stream[T]) IndexOf(target T, equal func(a, b T) bool) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// LastIndexOf returns the index of the last occurrence of the specified element in this stream, or -1 if this stream does not contain the element.
|
// LastIndexOf returns the index of the last occurrence of the specified element in this stream, or -1 if this stream does not contain the element.
|
||||||
|
// Play: https://go.dev/play/p/CjeoNw2eac_G
|
||||||
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int {
|
func (s Stream[T]) LastIndexOf(target T, equal func(a, b T) bool) int {
|
||||||
for i := len(s.source) - 1; i >= 0; i-- {
|
for i := len(s.source) - 1; i >= 0; i-- {
|
||||||
if equal(s.source[i], target) {
|
if equal(s.source[i], target) {
|
||||||
|
|||||||
+1
-1
@@ -737,7 +737,7 @@ func RegexMatchAllGroups(pattern, str string) [][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ExtractContent extracts the content between the start and end strings in the source string.
|
// ExtractContent extracts the content between the start and end strings in the source string.
|
||||||
// Play: todo
|
// Play: https://go.dev/play/p/Ay9UIk7Rum9
|
||||||
func ExtractContent(s, start, end string) []string {
|
func ExtractContent(s, start, end string) []string {
|
||||||
result := []string{}
|
result := []string{}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user