1
0
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:
dudaodong
2023-01-07 14:22:07 +08:00
parent ca2a51b37e
commit cc68feb52d
4 changed files with 135 additions and 14 deletions

View File

@@ -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.

View File

@@ -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 包含操作切片的方法集合。

View File

@@ -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,

View 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
}