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即可。

dawei

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