0
点赞
收藏
分享

微信扫一扫

golang使用小技巧

金牛豆豆 2023-05-24 阅读 55

封装gorouting并捕捉panic

从k8s源码中学到的,觉得小而精,感觉比定时器好用呢

k8s源码中是这样使用的

golang使用小技巧_gorouting

// 每隔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

举报

相关推荐

0 条评论