jpillora/backoff
jpillora/backoff has 661 GitHub stars and 72 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-15 13:57 UTC. Last push 2026-10-25.
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
About
Simple backoff algorithm in Go (golang)
Developer ToolsREADME.md
OriginalBackoff
A simple exponential backoff counter in Go (Golang)
Install
Requires Go 1.19 or later.
$ go get -v github.com/jpillora/backoff
Usage
Backoff is a time.Duration counter. It starts at Min. After every call to Duration() it is multiplied by Factor. It is capped at Max. It returns to Min on every call to Reset(). Jitter adds randomness (see below). Used in conjunction with the time package.
Simple example
b := &backoff.Backoff{
//These are the defaults
Min: 100 * time.Millisecond,
Max: 10 * time.Second,
Factor: 2,
Jitter: false,
}
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
fmt.Printf("Reset!\n")
b.Reset()
fmt.Printf("%s\n", b.Duration())
100ms
200ms
400ms
Reset!
100ms
Example using net package
b := &backoff.Backoff{
Max: 5 * time.Minute,
}
for {
conn, err := net.Dial("tcp", "example.com:5309")
if err != nil {
d := b.Duration()
fmt.Printf("%s, reconnecting in %s", err, d)
time.Sleep(d)
continue
}
//connected
b.Reset()
conn.Write([]byte("hello world!"))
// ... Read ... Write ... etc
conn.Close()
//disconnected
}
Example using Jitter
Enabling Jitter adds some randomization to the backoff durations. See Amazon's writeup of performance gains using jitter.
b := &backoff.Backoff{
Jitter: true,
}
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
fmt.Printf("Reset!\n")
b.Reset()
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
fmt.Printf("%s\n", b.Duration())
Illustrative output (durations may differ):
100ms
106.600049ms
281.228155ms
Reset!
100ms
104.381845ms
214.957989ms
Documentation
https://godoc.org/github.com/jpillora/backoff
Credits
Forked from some JavaScript written by @tj