Go错误处理技巧

111

我刚开始接触Go语言。我的代码中开始出现很多这种情况:

   if err != nil {
      //handle err
   }

或者这个

  if err := rows.Scan(&some_column); err != nil {
      //handle err
  }

在Go语言中,有一些好的成语/策略/最佳实践来检查和处理错误吗?

编辑以澄清:我不是在抱怨或建议Go团队提出更好的方法。我想知道我是否做得对,或者是否错过了社区已经找到的某些技巧。谢谢大家。


4
没有,这是一个经常讨论且合理的话题。也有很多进化提案。团队的答案似乎是,在编写良好的代码中不应该成为问题。 - Denys Séguret
相关链接:https://dev59.com/rWUp5IYBdhLWcg3wRF6c?rq=1 - user2437417
请注意,这个相关的问题并不完全与这个相同。答案太具体了。 - Denys Séguret
这种烦恼也有其合理性:它使快速编写程序变得更加困难,但也使通过简单地重新抛出错误来创建错误变得更加困难。 - Denys Séguret
你可以在这个链接中找到Andrew Gerrand和Brad Fitzpatrick用Go语言写的HTTP/2客户端的初始代码。 - Supreet Sethi
11个回答

-4
如果你想要精确控制错误,这可能不是解决方案,但对我来说,大多数情况下,任何错误都会让程序停止运行。
因此,我使用函数代替。
func Err(err error) {
    if err!=nil {
        fmt.Println("Oops", err)
        os.Exit(1)
    }
}

fi, err := os.Open("mmm.txt")
Err(err)

1
这样的消息应该发送到stderr而不是stdout,所以只需使用log.Fatal(err)log.Fatalln("some message:", err)。由于几乎没有什么东西除了main应该做出这样的决定来结束整个程序(即从函数/方法返回错误,不要中止),在极少数情况下,如果这是您想要做的事情,最好明确地执行它(即if err := someFunc(); err != nil { log.Fatal(err) }),而不是通过一个不清楚其作用的“helper”函数(名称“Err”不好,它没有表明它可能终止程序)。 - Dave C
学到了新东西!谢谢@DaveC - Gon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接