捕捉三方包里的panic的正确姿势是什么
1. 运行环境
go version go1.18.1 darwin/amd64
2. 问题描述?
在使用某些三方包时,三方包里的某些方法会panic,会阻断自己程序的运行,由于go没有异常,正确捕捉三方包的panic姿势是什么?
比如三方包github.com/aliyun/aliyun-mns-go-sdk
封装方法如下:
func newClient(endpoint, access_id, secret string) (ali_mns.MNSClient, error) {
defer func() {
log.Fatalln(recover())
}()
return ali_mns.NewAliMNSClient(endpoint, access_id, secret), nil
}
由于NewAliMNSClient
会panic,我该怎么实现这个方法呢?无论如何,都会返回client或者一个error
捕捉的意义在什么?中断、重试、打印log; 看场景来,除了重试,需要要new 里捕捉,感觉直接在接口入口做统一异常处理。 当然整个go生态还没有错误处理的最佳实践,看个人喜欢了
三方包一般 check error 就行了 三方包的 panic 基本都是使用姿势不正确
看看这个
利用闭包封装一个执行的方法
然后外部去执行下