Golang 自己写个重试方法
包装类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | package helper import ( "fmt" "sync" ) type RetryHelper struct { } var instance *RetryHelper var once sync.Once func GetRetryHelperInstance() *RetryHelper { once.Do( func () { instance = &RetryHelper{} }) return instance } // Run // @Description: 方法重试 // @receiver helper // @param count 重试次数,如果count<=0 则不进行重试 // @param id 任务标注,string // @param handler 隐匿方法,如需重试请返回 err 且 err!=nil // @return err 多次重试后,如果handler还是返回 err,则返回该 err // func (*RetryHelper) Run(count int, id string, handler func () error) (err error) { defer func () { }() //第一次正常执行 err = handler() if err != nil && count > 0 { //发现第一次执行失败,不处理panic for i := 0; i < count; i++ { if err = handler(); err != nil { fmt.Println(fmt.Sprintf( "任务序列%s第%d次重试执行失败。message= %s" , id, i+1, err.Error())) } else { break } } } return err } |
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | package test import ( "errors" "fmt" "hello/src/helper" "testing" ) func TestRetry(t *testing.T) { var a int = 1 var b int = 9 var c int err := helper.GetRetryHelperInstance().Run(4, "test" , func () error { c = a + b return errors.New( "number is Error" ) }) if err != nil { fmt.Println(err.Error()) return } fmt.Println(c) } |
用法有点像是C# 中的 lambda匿名方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了