added more docs

This commit is contained in:
Jaime Pillora 2015-03-03 09:01:21 +11:00
parent 34204cc40b
commit a6647af774
2 changed files with 15 additions and 5 deletions

View File

@ -2,11 +2,11 @@
A simple backoff algorithm in Go (Golang) A simple backoff algorithm in Go (Golang)
[![GoDoc](https://godoc.org/github.com/jpillora/backoff?status.svg)](https://godoc.org/github.com/jpillora/backoff)
# Usage # Usage
Starts at `Min`, multiplied by `Factor` every call to 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()`. Used in conjunction with the `time` package.
`Duration()` where it is capped at `Max`. Commonly used
in conjunction with `time.Sleep(duration)`.
``` go ``` go

View File

@ -5,13 +5,22 @@ import (
"time" "time"
) )
//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().
//Used in conjunction with the time package.
type Backoff struct { type Backoff struct {
//Factor is the multiplying factor for each increment step
attempts, Factor int attempts, Factor int
//Min and Max are the minimum and maximum values of the counter
curr, Min, Max time.Duration curr, Min, Max time.Duration
} }
//Returns the current value of the counter and then
//multiplies it Factor
func (b *Backoff) Duration() time.Duration { func (b *Backoff) Duration() time.Duration {
//abit hacky though, if zero-value, apply defaults //Zero-values are nonsensical, so we use
//them to apply defaults
if b.Min == 0 { if b.Min == 0 {
b.Min = 100 * time.Millisecond b.Min = 100 * time.Millisecond
} }
@ -33,6 +42,7 @@ func (b *Backoff) Duration() time.Duration {
return time.Duration(math.Min(ms, float64(b.Max))) return time.Duration(math.Min(ms, float64(b.Max)))
} }
//Resets the current value of the counter back to Min
func (b *Backoff) Reset() { func (b *Backoff) Reset() {
b.attempts = 0 b.attempts = 0
} }