Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

retry

A simple, production-ready retry library for Go with exponential backoff, jitter, and context support.

Features

  • Simple API for retrying operations
  • Context-aware cancellation & timeout support
  • Exponential backoff with jitter
  • Safe, production-tested design
  • No global state
  • Lightweight and dependency-free

Installation

go get github.com/thedevsaddam/retry/v2

Usage

Retry a function returning error

err := retry.DoFunc(ctx, 3, retry.NewBackoff(100*time.Millisecond), func() error {
    return doSomething()
})

if err != nil {
    log.Fatal(err)
}

Retry with a generic function

res, err := retry.Do(ctx, 3, retry.NewBackoff(100*time.Millisecond), myFunc, arg1, arg2)
if err != nil {
    log.Fatal(err)
}

fmt.Println(res)

Backoff configuration

b := retry.NewBackoff(100 * time.Millisecond)
b.Max = 5 * time.Second
b.Jitter = 0.3
b.Factor = 2

Behavior

  • Retries stop immediately on success
  • Retries stop on context cancellation
  • Exponential backoff increases delay per attempt
  • Jitter prevents thundering herd problems
  • Max backoff prevents unbounded wait time

Example

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

err := retry.DoFunc(ctx, 5, retry.NewBackoff(200*time.Millisecond), func() error {
    // API call / DB call / network request
    return errors.New("temporary failure")
})

Design Goals

  • Simple API surface
  • Safe for production systems
  • Predictable retry behavior
  • Easy to embed in microservices

License

MIT

About

Simple and easy retry mechanism package for Go

Topics

Resources

Contributing

Stars

67 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages