# Retry Package retry is for executing a function repeatedly until it was successful or canceled by the context.
## Source: [https://github.com/duke-git/lancet/blob/v1/retry/retry.go](https://github.com/duke-git/lancet/blob/v1/retry/retry.go) ## Usage: ```go import ( "github.com/duke-git/lancet/retry" ) ``` ## Index - [Context](#Context) - [Retry](#Retry) - [RetryFunc](#RetryFunc) - [RetryDuration](#RetryDuration) - [RetryTimes](#RetryTimes) ## Documentation ### ContextSet retry context config, can cancel the retry with context.
Signature: ```go func Context(ctx context.Context) ``` Example: ```go import ( "context" "errors" "fmt" "github.com/duke-git/lancet/retry" "time" ) func main() { ctx, cancel := context.WithCancel(context.TODO()) var number int increaseNumber := func() error { number++ if number > 3 { cancel() } return errors.New("error occurs") } err := retry.Retry(increaseNumber, retry.RetryDuration(time.Microsecond*50), retry.Context(ctx), ) if err != nil { fmt.Println(err) //retry is cancelled } } ``` ### RetryFuncFunction that retry executes.
Signature: ```go type RetryFunc func() error ``` Example: ```go package main import ( "fmt" "errors" "log" "github.com/duke-git/lancet/retry" ) func main() { var number int var increaseNumber retry.RetryFunc increaseNumber = func() error { number++ if number == 3 { return nil } return errors.New("error occurs") } err := retry.Retry(increaseNumber, retry.RetryDuration(time.Microsecond*50)) if err != nil { log.Fatal(err) } fmt.Println(number) //3 } ``` ### RetryTimesSet times of retry. Default times is 5.
Signature: ```go func RetryTimes(n uint) ``` Example: ```go package main import ( "fmt" "errors" "log" "github.com/duke-git/lancet/retry" ) func main() { var number int increaseNumber := func() error { number++ if number == 3 { return nil } return errors.New("error occurs") } err := retry.Retry(increaseNumber, retry.RetryTimes(2)) if err != nil { log.Fatal(err) //2022/02/01 18:42:25 function main.main.func1 run failed after 2 times retry exit status 1 } } ``` ### RetryDurationSet duration of retries. Default duration is 3 second.
Signature: ```go func RetryDuration(d time.Duration) ``` Example: ```go package main import ( "fmt" "errors" "log" "github.com/duke-git/lancet/retry" ) func main() { var number int increaseNumber := func() error { number++ if number == 3 { return nil } return errors.New("error occurs") } err := retry.Retry(increaseNumber, retry.RetryDuration(time.Microsecond*50)) if err != nil { log.Fatal(err) } fmt.Println(number) //3 } ``` ### RetryExecutes the retryFunc repeatedly until it was successful or canceled by the context.
Signature: ```go func Retry(retryFunc RetryFunc, opts ...Option) error ``` Example: ```go package main import ( "fmt" "errors" "log" "github.com/duke-git/lancet/retry" ) func main() { var number int increaseNumber := func() error { number++ if number == 3 { return nil } return errors.New("error occurs") } err := retry.Retry(increaseNumber, retry.RetryDuration(time.Microsecond*50)) if err != nil { log.Fatal(err) } fmt.Println(number) //3 } ```