百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
B

backoff

> 编程语言
开源

Go(Go语言)中的简单回退算法

659 stars0 点赞2 次浏览
访问官网GitHub

工具介绍

Go(Go语言)中的简单回退算法

退避

Go (Golang) 中的简单指数退避计数器

安装

$ go get -v github.com/jpillora/backoff

使用方法

Backoff 是一个 time.Duration 计数器。它的初始值为 Min。每次调用 Duration() 后,它都会乘以 Factor。它的上限为 Max。每次调用 Reset() 后,它都会回到 Min。Jitter 会添加随机性(参见下面) 。与 time 包一起使用。

简单示例

go

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

使用 net 包的示例

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

使用 Jitter 的示例

启用 Jitter 会为回退时长添加一些随机性。请参阅 Amazon 关于使用 Jitter 提高性能的说明。种子不必设置,但设置后可获得可重复的结果。

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Gobackoffgogolang

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言