mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-11 00:02:28 +08:00
doc&test: add example and update doc for retry package
This commit is contained in:
22
README.md
22
README.md
@@ -588,11 +588,23 @@ import "github.com/duke-git/lancet/v2/retry"
|
|||||||
|
|
||||||
#### Function list:
|
#### Function list:
|
||||||
|
|
||||||
- [Context](https://github.com/duke-git/lancet/blob/main/docs/retry.md#Context)
|
- **<big>Context</big>** : set retry context config option.
|
||||||
- [Retry](https://github.com/duke-git/lancet/blob/main/docs/retry.md#Retry)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#Context)]
|
||||||
- [RetryFunc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryFunc)
|
[[play](https://go.dev/play/p/xnAOOXv9GkS)]
|
||||||
- [RetryDuration](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryDuration)
|
- **<big>Retry</big>** : executes the retryFunc repeatedly until it was successful or canceled by the context.
|
||||||
- [RetryTimes](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryTimes)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#Retry)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryFunc</big>** : function that retry executes.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryFunc)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryDuration</big>** : set duration of retry
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryDuration)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryTimes</big>** : set times of retry.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry.md#RetryTimes)]
|
||||||
|
[[play](https://go.dev/play/p/ssfVeU2SwLO)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 16. Slice contains some functions to manipulate slice.
|
### 16. Slice contains some functions to manipulate slice.
|
||||||
|
|
||||||
|
|||||||
@@ -588,11 +588,23 @@ import "github.com/duke-git/lancet/v2/retry"
|
|||||||
|
|
||||||
#### 函数列表:
|
#### 函数列表:
|
||||||
|
|
||||||
- [Context](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Context)
|
- **<big>Context</big>** : 设置重试context参数。
|
||||||
- [Retry](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Retry)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Context)]
|
||||||
- [RetryFunc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryFunc)
|
[[play](https://go.dev/play/p/xnAOOXv9GkS)]
|
||||||
- [RetryDuration](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryDuration)
|
- **<big>Retry</big>** : 重试执行函数retryFunc,直到函数运行成功,或被context取消。
|
||||||
- [RetryTimes](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryTimes)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#Retry)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryFunc</big>** : 重试执行的函数。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryFunc)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryDuration</big>** : 设置重试间隔时间,默认3秒。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryDuration)]
|
||||||
|
[[play](https://go.dev/play/p/nk2XRmagfVF)]
|
||||||
|
- **<big>RetryTimes</big>** : 设置重试次数,默认5。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/retry_zh-CN.md#RetryTimes)]
|
||||||
|
[[play](https://go.dev/play/p/ssfVeU2SwLO)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 16. slice 包含操作切片的方法集合。
|
### 16. slice 包含操作切片的方法集合。
|
||||||
|
|
||||||
|
|||||||
@@ -34,21 +34,24 @@ type RetryFunc func() error
|
|||||||
// Option is for adding retry config
|
// Option is for adding retry config
|
||||||
type Option func(*RetryConfig)
|
type Option func(*RetryConfig)
|
||||||
|
|
||||||
// RetryTimes set times of retry
|
// RetryTimes set times of retry.
|
||||||
|
// Play: https://go.dev/play/p/ssfVeU2SwLO
|
||||||
func RetryTimes(n uint) Option {
|
func RetryTimes(n uint) Option {
|
||||||
return func(rc *RetryConfig) {
|
return func(rc *RetryConfig) {
|
||||||
rc.retryTimes = n
|
rc.retryTimes = n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RetryDuration set duration of retries
|
// RetryDuration set duration of retries.
|
||||||
|
// Play: https://go.dev/play/p/nk2XRmagfVF
|
||||||
func RetryDuration(d time.Duration) Option {
|
func RetryDuration(d time.Duration) Option {
|
||||||
return func(rc *RetryConfig) {
|
return func(rc *RetryConfig) {
|
||||||
rc.retryDuration = d
|
rc.retryDuration = d
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Context set retry context config
|
// Context set retry context config.
|
||||||
|
// Play: https://go.dev/play/p/xnAOOXv9GkS
|
||||||
func Context(ctx context.Context) Option {
|
func Context(ctx context.Context) Option {
|
||||||
return func(rc *RetryConfig) {
|
return func(rc *RetryConfig) {
|
||||||
rc.context = ctx
|
rc.context = ctx
|
||||||
@@ -56,7 +59,8 @@ func Context(ctx context.Context) Option {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Retry executes the retryFunc repeatedly until it was successful or canceled by the context
|
// Retry executes the retryFunc repeatedly until it was successful or canceled by the context
|
||||||
// The default times of retries is 5 and the default duration between retries is 3 seconds
|
// The default times of retries is 5 and the default duration between retries is 3 seconds.
|
||||||
|
// Play: https://go.dev/play/p/nk2XRmagfVF
|
||||||
func Retry(retryFunc RetryFunc, opts ...Option) error {
|
func Retry(retryFunc RetryFunc, opts ...Option) error {
|
||||||
config := &RetryConfig{
|
config := &RetryConfig{
|
||||||
retryTimes: DefaultRetryTimes,
|
retryTimes: DefaultRetryTimes,
|
||||||
|
|||||||
93
retry/retry_example_test.go
Normal file
93
retry/retry_example_test.go
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
package retry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExampleContext() {
|
||||||
|
ctx, cancel := context.WithCancel(context.TODO())
|
||||||
|
|
||||||
|
number := 0
|
||||||
|
increaseNumber := func() error {
|
||||||
|
number++
|
||||||
|
if number > 3 {
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
return errors.New("error occurs")
|
||||||
|
}
|
||||||
|
|
||||||
|
Retry(increaseNumber,
|
||||||
|
RetryDuration(time.Microsecond*50),
|
||||||
|
Context(ctx),
|
||||||
|
)
|
||||||
|
|
||||||
|
fmt.Println(number)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// 4
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleRetryDuration() {
|
||||||
|
number := 0
|
||||||
|
increaseNumber := func() error {
|
||||||
|
number++
|
||||||
|
if number == 3 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("error occurs")
|
||||||
|
}
|
||||||
|
|
||||||
|
err := Retry(increaseNumber, RetryDuration(time.Microsecond*50))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(number)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// 3
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleRetryTimes() {
|
||||||
|
number := 0
|
||||||
|
|
||||||
|
increaseNumber := func() error {
|
||||||
|
number++
|
||||||
|
if number == 3 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("error occurs")
|
||||||
|
}
|
||||||
|
|
||||||
|
err := Retry(increaseNumber, RetryTimes(2))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// function retry.ExampleRetryTimes.func1 run failed after 2 times retry
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleRetry() {
|
||||||
|
number := 0
|
||||||
|
increaseNumber := func() error {
|
||||||
|
number++
|
||||||
|
if number == 3 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("error occurs")
|
||||||
|
}
|
||||||
|
|
||||||
|
err := Retry(increaseNumber, RetryDuration(time.Microsecond*50))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(number)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// 3
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user