首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go错误处理技术

Go错误处理技术
EN

Stack Overflow用户
提问于 2013-06-06 21:23:02
回答 11查看 23.6K关注 0票数 109

我才刚刚开始使用Go。我的代码开始有很多这样的东西:

代码语言:javascript
复制
   if err != nil {
      //handle err
   }

或者这个

代码语言:javascript
复制
  if err := rows.Scan(&some_column); err != nil {
      //handle err
  }

在Go中有没有一些检查和处理错误的好习惯/策略/最佳实践?

编辑以澄清:我不是在抱怨或建议Go团队拿出更好的东西。我在问我是不是做对了,还是我错过了社区提出的一些技术。谢谢大家。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-06-06 21:31:30

您的代码是惯用的,在我看来,这是可用的最佳实践。有些人肯定不同意,但我认为这是the standard libraries in Golang上常见的风格。换句话说,Go作者用这种方式编写错误处理。

票数 61
EN

Stack Overflow用户

发布于 2015-03-04 12:25:58

在这个问题被问到六个月后,Rob Pike写了一篇题为Errors are Values的博客文章。

在那里,他认为你不需要以OP提出的方式编程,并提到了标准库中的几个地方,在那里他们使用了不同的模式。

当然,涉及错误值的常见语句是测试它是否为空,但人们可以对错误值做无数其他的事情,应用其中的一些其他事情可以使您的程序更好,消除了使用死记硬背的if语句检查每个错误时出现的大部分样板。

..。

使用该语言来简化错误处理。

但请记住:无论你做什么,都要检查你的错误!

这是一本好书。

票数 31
EN

Stack Overflow用户

发布于 2013-06-06 22:42:33

我同意jnml的回答,即它们都是惯用代码,并添加以下内容:

您的第一个示例:

代码语言:javascript
复制
if err != nil {
      //handle err
}

在处理多个返回值时更加惯用。例如:

代码语言:javascript
复制
val, err := someFunc()
if err != nil {
      //handle err
}
//do stuff with val

当仅处理err值时,您的第二个示例是很好的速记。这适用于函数只返回error,或者故意忽略error以外的返回值的情况。例如,这有时与ReaderWriter函数一起使用,这两个函数返回写入字节数的int (有时是不必要的信息)和error

代码语言:javascript
复制
if _, err := f.Read(file); err != nil {
      //handle err
}
//do stuff with f

第二种形式称为使用if initialization statement

关于最佳实践,据我所知(除了在你需要的时候使用"errors"包创建新的错误),你已经涵盖了关于Go中错误的几乎所有你需要知道的东西!

编辑:如果你发现你真的不能没有异常,你可以用defer,panic & recover来模仿它们。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16963298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档