mirror of
https://github.com/duke-git/lancet.git
synced 2026-03-01 00:35:28 +08:00
Compare commits
4 Commits
622aacaf44
...
v2.3.6
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdefbde9f5 | ||
|
|
1e57a743af | ||
|
|
7d4184a365 | ||
|
|
1b73483945 |
49
README.md
49
README.md
@@ -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)
|
||||||
@@ -214,6 +214,30 @@ import "github.com/duke-git/lancet/v2/concurrency"
|
|||||||
- **<big>Tee</big>** : split one chanel into two channels, until cancel the context.
|
- **<big>Tee</big>** : split one chanel into two channels, until cancel the context.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#Tee)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#Tee)]
|
||||||
[[play](https://go.dev/play/p/3TQPKnCirrP)]
|
[[play](https://go.dev/play/p/3TQPKnCirrP)]
|
||||||
|
- **<big>NewKeyedLocker</big>** : KeyedLocker is a simple implementation of a keyed locker that allows for non-blocking lock acquisition.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#NewKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Do</big>** :acquires a lock for the specified key and executes the provided function.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#Do)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>NewRWKeyedLocker</big>** :RRWKeyedLocker is a read-write version of KeyedLocker.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#NewRWKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>RLock</big>** : acquires a read lock for the specified key and executes the provided function.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#RLock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Lock</big>** : acquires a write lock for the specified key and executes the provided function.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#Lock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>NewTryKeyedLocker</big>** : TryKeyedLocker is a non-blocking version of KeyedLocker.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#NewTryKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>TryLock</big>** : TryLock tries to acquire a lock for the specified key.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#TryLock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Unlock</big>** : Unlock releases the lock for the specified key.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/concurrency.md#Unlock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="condition"> 4. Condition package contains some functions for conditional judgment. eg. And, Or, TernaryOperator... <a href="#index">index</a> </h3>
|
<h3 id="condition"> 4. Condition package contains some functions for conditional judgment. eg. And, Or, TernaryOperator... <a href="#index">index</a> </h3>
|
||||||
|
|
||||||
@@ -331,7 +355,7 @@ import "github.com/duke-git/lancet/v2/convertor"
|
|||||||
- **<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)]
|
[[play](https://go.dev/play/p/HwdDPFcza1O)]
|
||||||
- **<big>ToBigInt</big>** : converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int.
|
- **<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)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/convertor.md#ToBigInt)]
|
||||||
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
||||||
|
|
||||||
@@ -694,7 +718,6 @@ import optional "github.com/duke-git/lancet/v2/datastructure/optional"
|
|||||||
- **<big>Optional</big>** : Optional container.
|
- **<big>Optional</big>** : Optional container.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datastructure/optional.md)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/datastructure/optional.md)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="eventbus"> 9. EventBus is an event bus used for handling events within an application. <a href="#index">Index</a></h3>
|
<h3 id="eventbus"> 9. EventBus is an event bus used for handling events within an application. <a href="#index">Index</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -778,6 +801,9 @@ import "github.com/duke-git/lancet/v2/fileutil"
|
|||||||
- **<big>RemoveFile</big>** : remove file, param should be file path.
|
- **<big>RemoveFile</big>** : remove file, param should be file path.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#RemoveFile)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#RemoveFile)]
|
||||||
[[play](https://go.dev/play/p/P2y0XW8a1SH)]
|
[[play](https://go.dev/play/p/P2y0XW8a1SH)]
|
||||||
|
- **<big>RemoveDir</big>** : delete directory.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#RemoveDir)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
- **<big>ReadFileToString</big>** : return string of file content.
|
- **<big>ReadFileToString</big>** : return string of file content.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#ReadFileToString)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/fileutil.md#ReadFileToString)]
|
||||||
[[play](https://go.dev/play/p/cmfwp_5SQTp)]
|
[[play](https://go.dev/play/p/cmfwp_5SQTp)]
|
||||||
@@ -926,7 +952,6 @@ import "github.com/duke-git/lancet/v2/function"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/function.md#Watcher)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/function.md#Watcher)]
|
||||||
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
|
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="maputil"> 12. Maputil package includes some functions to manipulate map. <a href="#index">index</a></h3>
|
<h3 id="maputil"> 12. Maputil package includes some functions to manipulate map. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -1097,7 +1122,9 @@ import "github.com/duke-git/lancet/v2/maputil"
|
|||||||
- **<big>GetOrDefault</big>** : returns the value of the given key or a default value if the key is not present.
|
- **<big>GetOrDefault</big>** : returns the value of the given key or a default value if the key is not present.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/maputil.md#GetOrDefault)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/maputil.md#GetOrDefault)]
|
||||||
[[play](https://go.dev/play/p/99QjSYSBdiM)]
|
[[play](https://go.dev/play/p/99QjSYSBdiM)]
|
||||||
|
- **<big>FindValuesBy</big>** : returns a slice of values from the map that satisfy the given predicate function.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/maputil.md#FindValuesBy)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="mathutil"> 13. Mathutil package implements some functions for math calculation. <a href="#index">index</a></h3>
|
<h3 id="mathutil"> 13. Mathutil package implements some functions for math calculation. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1282,6 +1309,12 @@ import "github.com/duke-git/lancet/v2/netutil"
|
|||||||
- **<big>IsTelnetConnected</big>** : checks if can if can telnet the specified host or not.
|
- **<big>IsTelnetConnected</big>** : checks if can if can telnet the specified host or not.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/netutil.md#IsTelnetConnected)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/netutil.md#IsTelnetConnected)]
|
||||||
[[play](https://go.dev/play/p/yiLCGtQv_ZG)]
|
[[play](https://go.dev/play/p/yiLCGtQv_ZG)]
|
||||||
|
- **<big>BuildUrl</big>** : builds a URL from the given params.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/netutil.md#BuildUrl)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>AddQueryParams</big>** : adds query parameters to the given URL.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/netutil.md#AddQueryParams)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="pointer"> 15. Pointer package contains some util functions to operate go pointer. <a href="#index">index</a></h3>
|
<h3 id="pointer"> 15. Pointer package contains some util functions to operate go pointer. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
@@ -1408,7 +1441,6 @@ import "github.com/duke-git/lancet/v2/retry"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/retry.md#RetryWithExponentialWithJitterBackoff)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/retry.md#RetryWithExponentialWithJitterBackoff)]
|
||||||
[[play](https://go.dev/play/p/xp1avQmn16X)]
|
[[play](https://go.dev/play/p/xp1avQmn16X)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="slice"> 18. Slice contains some functions to manipulate slice. <a href="#index">index</a></h3>
|
<h3 id="slice"> 18. Slice contains some functions to manipulate slice. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -2012,7 +2044,6 @@ import "github.com/duke-git/lancet/v2/system"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/system.md#GetProcessInfo)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/system.md#GetProcessInfo)]
|
||||||
[[play](https://go.dev/play/p/NQDVywEYYx7)]
|
[[play](https://go.dev/play/p/NQDVywEYYx7)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="tuple"> 23. Tuple package implements tuple data type and some operations on it. <a href="#index">index</a></h3>
|
<h3 id="tuple"> 23. Tuple package implements tuple data type and some operations on it. <a href="#index">index</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -2195,6 +2226,9 @@ import "github.com/duke-git/lancet/v2/validator"
|
|||||||
- **<big>IsNumberStr</big>** : check if the string can convert to a number.
|
- **<big>IsNumberStr</big>** : check if the string can convert to a number.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsNumberStr)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsNumberStr)]
|
||||||
[[play](https://go.dev/play/p/LzaKocSV79u)]
|
[[play](https://go.dev/play/p/LzaKocSV79u)]
|
||||||
|
- **<big>IsAlphaNumeric</big>** : check if the string is alphanumeric.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsAlphaNumeric)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
- **<big>IsJSON</big>** : check if the string is valid JSON.
|
- **<big>IsJSON</big>** : check if the string is valid JSON.
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsJSON)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/en/api/packages/validator.md#IsJSON)]
|
||||||
[[play](https://go.dev/play/p/8Kip1Itjiil)]
|
[[play](https://go.dev/play/p/8Kip1Itjiil)]
|
||||||
@@ -2324,6 +2358,7 @@ import "github.com/duke-git/lancet/v2/xerror"
|
|||||||
#### [Contribution Guide](./CONTRIBUTION.md)
|
#### [Contribution Guide](./CONTRIBUTION.md)
|
||||||
|
|
||||||
## Contributors
|
## Contributors
|
||||||
|
|
||||||
Thank you to all the people who contributed to lancet!
|
Thank you to all the people who contributed to lancet!
|
||||||
|
|
||||||
<a href="https://github.com/duke-git/lancet/graphs/contributors">
|
<a href="https://github.com/duke-git/lancet/graphs/contributors">
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -101,7 +101,6 @@ func main() {
|
|||||||
- [Validator](#user-content-validator)
|
- [Validator](#user-content-validator)
|
||||||
- [Xerror](#user-content-xerror)
|
- [Xerror](#user-content-xerror)
|
||||||
|
|
||||||
|
|
||||||
<h3 id="algorithm"> 1. algorithm 包实现一些基本查找和排序算法。 <a href="#index">回到目录</a></h3>
|
<h3 id="algorithm"> 1. algorithm 包实现一些基本查找和排序算法。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -214,6 +213,30 @@ import "github.com/duke-git/lancet/v2/concurrency"
|
|||||||
- **<big>Tee</big>** : 将一个 channel 分成两个 channel,直到取消上下文。
|
- **<big>Tee</big>** : 将一个 channel 分成两个 channel,直到取消上下文。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Tee)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Tee)]
|
||||||
[[play](https://go.dev/play/p/3TQPKnCirrP)]
|
[[play](https://go.dev/play/p/3TQPKnCirrP)]
|
||||||
|
- **<big>NewKeyedLocker</big>** : NewKeyedLocker 创建一个新的 KeyedLocker,并为锁的过期设置指定的 TTL。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#NewKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Do</big>** :为指定的键获取锁并执行提供的函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Do)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>NewRWKeyedLocker</big>** :RWKeyedLocker 是一个简单的键值读写锁实现,允许非阻塞的锁获取。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#NewRWKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>RLock</big>** : 为指定的键获取读锁并执行提供的函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#RLock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Lock</big>** : 为指定的键获取锁并执行提供的函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Lock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>NewTryKeyedLocker</big>** : 创建一个 TryKeyedLocker 实例,TryKeyedLocker 是 KeyedLocker 的非阻塞版本。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#NewTryKeyedLocker)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>TryLock</big>** : TryLock 尝试获取指定键的锁。如果锁成功获取,则返回 true,否则返回 false。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#TryLock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>Unlock</big>** : 释放指定键的锁。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/concurrency.md#Unlock)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="condition"> 4. condition 包含一些用于条件判断的函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="condition"> 4. condition 包含一些用于条件判断的函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -331,7 +354,7 @@ import "github.com/duke-git/lancet/v2/convertor"
|
|||||||
- **<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)]
|
[[play](https://go.dev/play/p/HwdDPFcza1O)]
|
||||||
- **<big>ToBigInt</big>** : 将整数转为*big.Int。
|
- **<big>ToBigInt</big>** : 将整数转为\*big.Int。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToBigInt)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/convertor.md#ToBigInt)]
|
||||||
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
[[play](https://go.dev/play/p/X3itkCxwB_x)]
|
||||||
|
|
||||||
@@ -658,7 +681,6 @@ import "github.com/duke-git/lancet/v2/datetime"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#MaxMin)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/datetime.md#MaxMin)]
|
||||||
[[play](https://go.dev/play/p/rbW51cDtM_2)]
|
[[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>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -777,6 +799,9 @@ import "github.com/duke-git/lancet/v2/fileutil"
|
|||||||
- **<big>RemoveFile</big>** : 删除文件。
|
- **<big>RemoveFile</big>** : 删除文件。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#RemoveFile)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#RemoveFile)]
|
||||||
[[play](https://go.dev/play/p/P2y0XW8a1SH)]
|
[[play](https://go.dev/play/p/P2y0XW8a1SH)]
|
||||||
|
- **<big>RemoveDir</big>** : 删除目录,支持传入删除前的回调函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#RemoveDir)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
- **<big>ReadFileToString</big>** : 读取文件内容并返回字符串。
|
- **<big>ReadFileToString</big>** : 读取文件内容并返回字符串。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadFileToString)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#ReadFileToString)]
|
||||||
[[play](https://go.dev/play/p/cmfwp_5SQTp)]
|
[[play](https://go.dev/play/p/cmfwp_5SQTp)]
|
||||||
@@ -832,7 +857,6 @@ import "github.com/duke-git/lancet/v2/fileutil"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#GetExeOrDllVersion)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/fileutil.md#GetExeOrDllVersion)]
|
||||||
[[play](https://go.dev/play/p/iLRrDBhE38E)]
|
[[play](https://go.dev/play/p/iLRrDBhE38E)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="formatter"> 11. formatter 格式化器包含一些数据格式化处理方法。 <a href="#index">回到目录</a></h3>
|
<h3 id="formatter"> 11. formatter 格式化器包含一些数据格式化处理方法。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -926,8 +950,6 @@ import "github.com/duke-git/lancet/v2/function"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Watcher)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/function.md#Watcher)]
|
||||||
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
|
[[play](https://go.dev/play/p/l2yrOpCLd1I)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="maputil"> 13. maputil 包括一些操作 map 的函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="maputil"> 13. maputil 包括一些操作 map 的函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -1098,6 +1120,9 @@ import "github.com/duke-git/lancet/v2/maputil"
|
|||||||
- **<big>GetOrDefault</big>** : 返回给定键的值,如果键不存在,则返回默认值。
|
- **<big>GetOrDefault</big>** : 返回给定键的值,如果键不存在,则返回默认值。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#GetOrDefault)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#GetOrDefault)]
|
||||||
[[play](https://go.dev/play/p/99QjSYSBdiM)]
|
[[play](https://go.dev/play/p/99QjSYSBdiM)]
|
||||||
|
- **<big>FindValuesBy</big>** : 返回一个切片,包含满足给定谓词判断函数的 map 中的值。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/maputil.md#FindValuesBy)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="mathutil"> 14. mathutil 包实现了一些数学计算的函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="mathutil"> 14. mathutil 包实现了一些数学计算的函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1282,6 +1307,12 @@ import "github.com/duke-git/lancet/v2/netutil"
|
|||||||
- **<big>IsTelnetConnected</big>** : 检查能否 telnet 到主机。
|
- **<big>IsTelnetConnected</big>** : 检查能否 telnet 到主机。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsTelnetConnected)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#IsTelnetConnected)]
|
||||||
[[play](https://go.dev/play/p/yiLCGtQv_ZG)]
|
[[play](https://go.dev/play/p/yiLCGtQv_ZG)]
|
||||||
|
- **<big>BuildUrl</big>** : 创建 url 字符串。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#BuildUrl)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
- **<big>AddQueryParams</big>** : 向 url 添加查询参数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/netutil.md#AddQueryParams)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
|
|
||||||
<h3 id="pointer"> 16. pointer 包支持一些指针类型的操作。 <a href="#index">回到目录</a></h3>
|
<h3 id="pointer"> 16. pointer 包支持一些指针类型的操作。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
@@ -1405,8 +1436,6 @@ import "github.com/duke-git/lancet/v2/retry"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryWithExponentialWithJitterBackoff)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/retry.md#RetryWithExponentialWithJitterBackoff)]
|
||||||
[[play](https://go.dev/play/p/xp1avQmn16X)]
|
[[play](https://go.dev/play/p/xp1avQmn16X)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="slice"> 19. slice 包含操作切片的方法集合。 <a href="#index">回到目录</a></h3>
|
<h3 id="slice"> 19. slice 包含操作切片的方法集合。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -1964,7 +1993,6 @@ import "github.com/duke-git/lancet/v2/strutil"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#FindAllOccurrences)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/strutil.md#FindAllOccurrences)]
|
||||||
[[play](https://go.dev/play/p/uvyA6azGLB1)]
|
[[play](https://go.dev/play/p/uvyA6azGLB1)]
|
||||||
|
|
||||||
|
|
||||||
<h3 id="system"> 23. system 包含 os, runtime, shell command 的相关函数。 <a href="#index">回到目录</a></h3>
|
<h3 id="system"> 23. system 包含 os, runtime, shell command 的相关函数。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -2013,8 +2041,6 @@ import "github.com/duke-git/lancet/v2/system"
|
|||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system.md#GetProcessInfo)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/system.md#GetProcessInfo)]
|
||||||
[[play](https://go.dev/play/p/NQDVywEYYx7)]
|
[[play](https://go.dev/play/p/NQDVywEYYx7)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3 id="tuple"> 24. Tuple 包实现一个元组数据类型。 <a href="#index">回到目录</a></h3>
|
<h3 id="tuple"> 24. Tuple 包实现一个元组数据类型。 <a href="#index">回到目录</a></h3>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -2197,6 +2223,9 @@ import "github.com/duke-git/lancet/v2/validator"
|
|||||||
- **<big>IsNumberStr</big>** : 验证字符串是否是可以转换为数字。
|
- **<big>IsNumberStr</big>** : 验证字符串是否是可以转换为数字。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsNumberStr)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsNumberStr)]
|
||||||
[[play](https://go.dev/play/p/LzaKocSV79u)]
|
[[play](https://go.dev/play/p/LzaKocSV79u)]
|
||||||
|
- **<big>IsAlphaNumeric</big>** : 验证字符串是字母或数字。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsAlphaNumeric)]
|
||||||
|
[[play](https://go.dev/play/p/todo)]
|
||||||
- **<big>IsJSON</big>** : 验证字符串是否是有效 json。
|
- **<big>IsJSON</big>** : 验证字符串是否是有效 json。
|
||||||
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsJSON)]
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/api/packages/validator.md#IsJSON)]
|
||||||
[[play](https://go.dev/play/p/8Kip1Itjiil)]
|
[[play](https://go.dev/play/p/8Kip1Itjiil)]
|
||||||
|
|||||||
@@ -41,12 +41,11 @@ import (
|
|||||||
- [NewKeyedLocker](#NewKeyedLocker)
|
- [NewKeyedLocker](#NewKeyedLocker)
|
||||||
- [KeyedLocker_Do](#Do)
|
- [KeyedLocker_Do](#Do)
|
||||||
- [NewRWKeyedLocker](#NewRWKeyedLocker)
|
- [NewRWKeyedLocker](#NewRWKeyedLocker)
|
||||||
- [RWKeyedLocker_RLock](#RLock)
|
- [RLock](#RLock)
|
||||||
- [RWKeyedLocker_Lock](#Lock)
|
- [Lock](#Lock)
|
||||||
- [NewTryKeyedLocker](#NewTryKeyedLocker)
|
- [NewTryKeyedLocker](#NewTryKeyedLocker)
|
||||||
- [TryKeyedLocker_TryLock](#TryLock)
|
- [TryLock](#TryLock)
|
||||||
- [TryKeyedLocker_Unlock](#Unlock)
|
- [Unlock](#Unlock)
|
||||||
|
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
@@ -525,7 +524,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Do">KeyedLocker_Do</span>
|
### <span id="Do">Do</span>
|
||||||
|
|
||||||
<p>为指定的键获取锁并执行提供的函数。</p>
|
<p>为指定的键获取锁并执行提供的函数。</p>
|
||||||
|
|
||||||
@@ -591,6 +590,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func NewRWKeyedLocker[K comparable](ttl time.Duration) *RWKeyedLocker[K]
|
func NewRWKeyedLocker[K comparable](ttl time.Duration) *RWKeyedLocker[K]
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -630,7 +630,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="RLock">RWKeyedLocker_RLock</span>
|
### <span id="RLock">RLock</span>
|
||||||
|
|
||||||
<p>RLock为指定的键获取读锁并执行提供的函数。</p>
|
<p>RLock为指定的键获取读锁并执行提供的函数。</p>
|
||||||
|
|
||||||
@@ -639,6 +639,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (l *RWKeyedLocker[K]) RLock(ctx context.Context, key K, fn func()) error
|
func (l *RWKeyedLocker[K]) RLock(ctx context.Context, key K, fn func()) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -678,15 +679,16 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Lock">RWKeyedLocker_Lock</span>
|
### <span id="Lock">Lock</span>
|
||||||
|
|
||||||
<p>RLock为指定的键获取锁并执行提供的函数。</p>
|
<p>Lock为指定的键获取锁并执行提供的函数。</p>
|
||||||
|
|
||||||
<b>函数签名:</b>
|
<b>函数签名:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func (l *RWKeyedLocker[K]) Lock(ctx context.Context, key K, fn func()) error
|
func (l *RWKeyedLocker[K]) Lock(ctx context.Context, key K, fn func()) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -735,6 +737,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func NewTryKeyedLocker[K comparable]() *TryKeyedLocker[K]
|
func NewTryKeyedLocker[K comparable]() *TryKeyedLocker[K]
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -766,7 +769,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="TryLock">TryKeyedLocker_TryLock</span>
|
### <span id="TryLock">TryLock</span>
|
||||||
|
|
||||||
<p>TryLock尝试获取指定键的锁。如果锁成功获取,则返回true,否则返回false。</p>
|
<p>TryLock尝试获取指定键的锁。如果锁成功获取,则返回true,否则返回false。</p>
|
||||||
|
|
||||||
@@ -807,7 +810,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Unlock">TryKeyedLocker_Unlock</span>
|
### <span id="Unlock">Unlock</span>
|
||||||
|
|
||||||
<p>释放指定键的锁。</p>
|
<p>释放指定键的锁。</p>
|
||||||
|
|
||||||
|
|||||||
@@ -1092,7 +1092,7 @@ func main() {
|
|||||||
|
|
||||||
|
|
||||||
### 4. PriorityQueue
|
### 4. PriorityQueue
|
||||||
切片实现的额优先级队列。
|
切片实现的优先级队列。
|
||||||
|
|
||||||
### <span id="NewPriorityQueue">NewPriorityQueue</span>
|
### <span id="NewPriorityQueue">NewPriorityQueue</span>
|
||||||
<p>返回一个具有特定容量的PriorityQueue指针,参数 `comarator` 用于比较队列中T类型的值。</p>
|
<p>返回一个具有特定容量的PriorityQueue指针,参数 `comarator` 用于比较队列中T类型的值。</p>
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ import (
|
|||||||
- [UploadFile](#UploadFile)
|
- [UploadFile](#UploadFile)
|
||||||
- [IsPingConnected](#IsPingConnected)
|
- [IsPingConnected](#IsPingConnected)
|
||||||
- [IsTelnetConnected](#IsTelnetConnected)
|
- [IsTelnetConnected](#IsTelnetConnected)
|
||||||
- [IsTelnetConnected](#IsTelnetConnected)
|
|
||||||
- [BuildUrl](#BuildUrl)
|
- [BuildUrl](#BuildUrl)
|
||||||
- [AddQueryParams](#AddQueryParams)
|
- [AddQueryParams](#AddQueryParams)
|
||||||
|
|
||||||
|
|||||||
@@ -824,6 +824,43 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### <span id="IsAlphaNumeric">IsAlphaNumeric</span>
|
||||||
|
|
||||||
|
<p>验证字符串是字母或数字。</p>
|
||||||
|
|
||||||
|
<b>函数签名:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func IsAlphaNumeric(s string) bool
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>示例:<span style="float:right;display:inline-block">[运行](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/duke-git/lancet/v2/validator"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
result1 := validator.IsAlphaNumeric("ABC")
|
||||||
|
result2 := validator.IsAlphaNumeric("123")
|
||||||
|
result3 := validator.IsAlphaNumeric("abc123")
|
||||||
|
result4 := validator.IsAlphaNumeric("abc123@#$")
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
fmt.Println(result4)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### <span id="IsJSON">IsJSON</span>
|
### <span id="IsJSON">IsJSON</span>
|
||||||
|
|
||||||
<p>验证字符串是否是有效json。</p>
|
<p>验证字符串是否是有效json。</p>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
# Concurrency
|
# Concurrency
|
||||||
|
|
||||||
Package concurrency contain some functions to support concurrent programming. eg, goroutine, channel.
|
Package concurrency contain some functions to support concurrent programming. eg, goroutine, channel.
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
@@ -11,6 +12,7 @@ Package concurrency contain some functions to support concurrent programming. eg
|
|||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
## Usage:
|
## Usage:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
import (
|
import (
|
||||||
"github.com/duke-git/lancet/v2/concurrency"
|
"github.com/duke-git/lancet/v2/concurrency"
|
||||||
@@ -37,20 +39,22 @@ import (
|
|||||||
### KeyedLocker
|
### KeyedLocker
|
||||||
|
|
||||||
- [NewKeyedLocker](#NewKeyedLocker)
|
- [NewKeyedLocker](#NewKeyedLocker)
|
||||||
- [KeyedLocker_Do](#Do)
|
- [Do](#Do)
|
||||||
- [NewRWKeyedLocker](#NewRWKeyedLocker)
|
- [NewRWKeyedLocker](#NewRWKeyedLocker)
|
||||||
- [RWKeyedLocker_RLock](#RLock)
|
- [RLock](#RLock)
|
||||||
- [RWKeyedLocker_Lock](#Lock)
|
- [Lock](#Lock)
|
||||||
- [NewTryKeyedLocker](#NewTryKeyedLocker)
|
- [NewTryKeyedLocker](#NewTryKeyedLocker)
|
||||||
- [TryKeyedLocker_TryLock](#TryLock)
|
- [TryLock](#TryLock)
|
||||||
- [TryKeyedLocker_Unlock](#Unlock)
|
- [Unlock](#Unlock)
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
## Channel
|
## Channel
|
||||||
|
|
||||||
### <span id="NewChannel">NewChannel</span>
|
### <span id="NewChannel">NewChannel</span>
|
||||||
|
|
||||||
<p>Create a Channel pointer instance.</p>
|
<p>Create a Channel pointer instance.</p>
|
||||||
|
|
||||||
<b>Signature:</b>
|
<b>Signature:</b>
|
||||||
@@ -59,6 +63,7 @@ import (
|
|||||||
type Channel[T any] struct
|
type Channel[T any] struct
|
||||||
func NewChannel[T any]() *Channel[T]
|
func NewChannel[T any]() *Channel[T]
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7aB4KyMMp9A)</span></b>
|
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7aB4KyMMp9A)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -83,6 +88,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Bridge(ctx context.Context, chanStream <-chan <-chan T) <-chan T
|
func (c *Channel[T]) Bridge(ctx context.Context, chanStream <-chan <-chan T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/qmWSy1NVF-Y)</span></b>
|
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/qmWSy1NVF-Y)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -135,6 +141,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) FanIn(ctx context.Context, channels ...<-chan T) <-chan T
|
func (c *Channel[T]) FanIn(ctx context.Context, channels ...<-chan T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/2VYFMexEvTm)</span></b>
|
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/2VYFMexEvTm)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -174,6 +181,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Repeat(ctx context.Context, values ...T) <-chan T
|
func (c *Channel[T]) Repeat(ctx context.Context, values ...T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -213,6 +221,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Generate(ctx context.Context, values ...T) <-chan T
|
func (c *Channel[T]) Generate(ctx context.Context, values ...T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7aB4KyMMp9A)</span></b>
|
<b>Example: <span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/7aB4KyMMp9A)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -251,6 +260,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) RepeatFn(ctx context.Context, fn func() T) <-chan T
|
func (c *Channel[T]) RepeatFn(ctx context.Context, fn func() T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -293,6 +303,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Or(channels ...<-chan T) <-chan T
|
func (c *Channel[T]) Or(channels ...<-chan T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -336,6 +347,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) OrDone(ctx context.Context, channel <-chan T) <-chan T
|
func (c *Channel[T]) OrDone(ctx context.Context, channel <-chan T) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -374,6 +386,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Take(ctx context.Context, valueStream <-chan T, number int) <-chan T
|
func (c *Channel[T]) Take(ctx context.Context, valueStream <-chan T, number int) <-chan T
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -420,6 +433,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (c *Channel[T]) Tee(ctx context.Context, in <-chan T) (<-chan T, <-chan T)
|
func (c *Channel[T]) Tee(ctx context.Context, in <-chan T) (<-chan T, <-chan T)
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:</b>
|
<b>Example:</b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -512,7 +526,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Do">KeyedLocker_Do</span>
|
### <span id="Do">Do</span>
|
||||||
|
|
||||||
<p>Acquires a lock for the specified key and executes the provided function.</p>
|
<p>Acquires a lock for the specified key and executes the provided function.</p>
|
||||||
|
|
||||||
@@ -578,6 +592,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func NewRWKeyedLocker[K comparable](ttl time.Duration) *RWKeyedLocker[K]
|
func NewRWKeyedLocker[K comparable](ttl time.Duration) *RWKeyedLocker[K]
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -617,7 +632,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="RLock">RWKeyedLocker_RLock</span>
|
### <span id="RLock">RLock</span>
|
||||||
|
|
||||||
<p>Acquires a read lock for the specified key and executes the provided function.</p>
|
<p>Acquires a read lock for the specified key and executes the provided function.</p>
|
||||||
|
|
||||||
@@ -626,6 +641,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (l *RWKeyedLocker[K]) RLock(ctx context.Context, key K, fn func()) error
|
func (l *RWKeyedLocker[K]) RLock(ctx context.Context, key K, fn func()) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -665,7 +681,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Lock">RWKeyedLocker_Lock</span>
|
### <span id="Lock">Lock</span>
|
||||||
|
|
||||||
<p>Acquires a write lock for the specified key and executes the provided function.</p>
|
<p>Acquires a write lock for the specified key and executes the provided function.</p>
|
||||||
|
|
||||||
@@ -674,6 +690,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func (l *RWKeyedLocker[K]) Lock(ctx context.Context, key K, fn func()) error
|
func (l *RWKeyedLocker[K]) Lock(ctx context.Context, key K, fn func()) error
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -722,6 +739,7 @@ func main() {
|
|||||||
```go
|
```go
|
||||||
func NewTryKeyedLocker[K comparable]() *TryKeyedLocker[K]
|
func NewTryKeyedLocker[K comparable]() *TryKeyedLocker[K]
|
||||||
```
|
```
|
||||||
|
|
||||||
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
<b>Example:<span style="float:right;display:inline-block;">[Run](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
```go
|
```go
|
||||||
@@ -753,7 +771,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="TryLock">TryKeyedLocker_TryLock</span>
|
### <span id="TryLock">TryLock</span>
|
||||||
|
|
||||||
<p>TryLock tries to acquire a lock for the specified key.</p>
|
<p>TryLock tries to acquire a lock for the specified key.</p>
|
||||||
|
|
||||||
@@ -794,7 +812,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### <span id="Unlock">TryKeyedLocker_Unlock</span>
|
### <span id="Unlock">Unlock</span>
|
||||||
|
|
||||||
<p>Unlock releases the lock for the specified key.</p>
|
<p>Unlock releases the lock for the specified key.</p>
|
||||||
|
|
||||||
|
|||||||
@@ -826,6 +826,43 @@ func main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### <span id="IsAlphaNumeric">IsAlphaNumeric</span>
|
||||||
|
|
||||||
|
<p>Check if the string is alphanumeric.</p>
|
||||||
|
|
||||||
|
<b>Signature:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func IsAlphaNumeric(s string) bool
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>Example:<span style="float:right;display:inline-block">[Run](https://go.dev/play/p/todo)</span></b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/duke-git/lancet/v2/validator"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
result1 := validator.IsAlphaNumeric("ABC")
|
||||||
|
result2 := validator.IsAlphaNumeric("123")
|
||||||
|
result3 := validator.IsAlphaNumeric("abc123")
|
||||||
|
result4 := validator.IsAlphaNumeric("abc123@#$")
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
fmt.Println(result4)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// false
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### <span id="IsJSON">IsJSON</span>
|
### <span id="IsJSON">IsJSON</span>
|
||||||
|
|
||||||
<p>Check if the string is valid JSON.</p>
|
<p>Check if the string is valid JSON.</p>
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ func IsJSON(str string) bool {
|
|||||||
return json.Unmarshal([]byte(str), &js) == nil
|
return json.Unmarshal([]byte(str), &js) == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsAlphaNumericStr check if the string is alphanumeric.
|
// IsAlphaNumeric check if the string is alphanumeric.
|
||||||
// Play: todo
|
// Play: todo
|
||||||
func IsAlphaNumeric(s string) bool {
|
func IsAlphaNumeric(s string) bool {
|
||||||
return alphaNumericMatcher.MatchString(s)
|
return alphaNumericMatcher.MatchString(s)
|
||||||
|
|||||||
@@ -665,3 +665,21 @@ func ExampleIsChinaUnionPay() {
|
|||||||
// true
|
// true
|
||||||
// false
|
// false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleIsAlphaNumeric() {
|
||||||
|
result1 := IsAlphaNumeric("ABC")
|
||||||
|
result2 := IsAlphaNumeric("123")
|
||||||
|
result3 := IsAlphaNumeric("abc123")
|
||||||
|
result4 := IsAlphaNumeric("abc123@#$")
|
||||||
|
|
||||||
|
fmt.Println(result1)
|
||||||
|
fmt.Println(result2)
|
||||||
|
fmt.Println(result3)
|
||||||
|
fmt.Println(result4)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// true
|
||||||
|
// false
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user