站长网 语言 关于Go程序错误处理的一些提议

关于Go程序错误处理的一些提议

Go的错误处理这块是日常被大家吐槽较多的地方,我在工作中也观察到一些现象,比较严重的是在各层级的逻辑代码中对错误的处理有些重复。比如,有人写代码就会在每一层都判断错误并记录日志,从代码层面看,貌似很严谨,但是如果看日志会发现一堆重复的信息,

Go的错误处理这块是日常被大家吐槽较多的地方,我在工作中也观察到一些现象,比较严重的是在各层级的逻辑代码中对错误的处理有些重复。

 

比如,有人写代码就会在每一层都判断错误并记录日志,从代码层面看,貌似很严谨,但是如果看日志会发现一堆重复的信息,等到排查问题时反而会造成干扰。

 

今天给大家总结三点Go代码错误处理相关的最佳实践给大家。

 

这些最佳实践也是网上一些前辈分享的,我自己实践后在这里用自己的语言描述出来,希望能对大家有所帮助。

 

认识error

Go程序通过error类型的值表示错误

 

error类型是一个内建接口类型,该接口只规定了一个返回字符串值的Error方法。

 

type error interface { 

    Error() string 

Go语言的函数经常会返回一个error值,调用者通过测试error值是否是nil来进行错误处理。

 

i, err := strconv.Atoi("42") 

if err != nil { 

    fmt.Printf("couldn't convert number: %v\n", err) 

    return 

fmt.Println("Converted integer:", i) 

error为nil时表示成功;非nil的error表示失败。

 

自定义错误记得要实现error接口

我们经常会定义符合自己需要的错误类型,但是记住要让这些类型实现error接口,这样就不用在调用方的程序里引入额外的类型。

 

比如下面我们自己定义了myError这个类型,如果不实现error接口的话,调用者的代码中就会被myError这个类型侵入。比如下面的run函数,在定义返回值类型时,直接定义成error即可。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1102/18171.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部