封装gorouting并捕捉panic
从k8s源码中学到的,觉得小而精,感觉比定时器好用呢
k8s源码中是这样使用的
// 每隔peroid后就执行传入的函数
func Forever(f func(), period time.Duration) {
for {
func() {
defer HandleCrash() // 捕捉函数中的panic
f()
}()
time.Sleep(period)
}
}
// 捕捉函数中的panic
func HandleCrash() {
r := recover()
if r != nil {
fmt.Printf("Recovered from panic: %#v", r)
}
}
// 测试函数
func test() {
fmt.Println("我开始执行了----", time.Now())
a := []int{1, 2}
fmt.Println(a[10])
}
func main() {
go Forever(test, 5*time.Second) // 测试执行
select {} // 阻塞主 gorouting
}
// 打印效果
我开始执行了---- 2023-05-24 12:20:48.178207 +0800 CST m=+0.000109710
我开始执行了---- 2023-05-24 12:20:53.18062 +0800 CST m=+5.002540710
我开始执行了---- 2023-05-24 12:20:58.181879 +0800 CST m=+10.003818293
标签:24,----,技巧,time,golang,2023,func,使用,panic
From: https://blog.51cto.com/landandan/6338534