我刚刚开始使用Go.我的代码开始有很多这样的:
if err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
或这个
if err := rows.Scan(&some_column); err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
在Go中检查和处理错误是否有一些很好的习语/策略/最佳实践?
编辑澄清:我不是在追逐或暗示Go团队想出更好的东西.我问的是我做得对,还是我错过了社区提出的一些技巧.谢谢大家.
zzz*_*zzz 60
您的代码是惯用的,我认为这是最佳实践.有些人肯定不同意,但我认为这是Golang标准库中看到的风格.换句话说,Go作者以这种方式编写错误处理.
Mic*_*uff 30
在提出这个问题六个月之后,Rob Pike写了一篇名为Errors are Values的博客文章.
在那里,他认为你不需要以OP提供的方式编程,并提到标准库中的几个地方,他们使用不同的模式.
当然,涉及错误值的常见语句是测试它是否为nil,但是还有无数其他可以用错误值做的事情,并且应用其他一些东西可以使你的程序更好,从而消除了大量的样板如果使用rote if语句检查每个错误,则会出现这种情况.
...
使用该语言可以简化错误处理.
但请记住:无论你做什么,总是检查你的错误!
这是一个很好的阅读.
Int*_*net 22
我同意jnml的答案,他们都是惯用代码,并添加以下内容:
你的第一个例子:
if err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
在处理多个返回值时更加惯用.例如:
val, err := someFunc()
if err != nil {
//handle err
}
//do stuff with val
Run Code Online (Sandbox Code Playgroud)
你的第二个例子是只处理err价值的好速记.如果函数只返回一个error,或者如果你故意忽略除了之外的返回值,则适用error.例如,这有时与返回写入的字节数(有时是不必要的信息)的函数Reader和Writer函数一起使用,int并且error:
if _, err := f.Read(file); err != nil {
//handle err
}
//do stuff with f
Run Code Online (Sandbox Code Playgroud)
第二种形式称为使用if初始化语句.
所以关于最佳实践,据我所知(除了使用"errors"包在你需要时创建新的错误)你已经涵盖了几乎所有你需要知道的Go中的错误!
编辑:如果你发现你真的不能没有例外,你可以模仿他们defer,panic&recover.
| 归档时间: |
|
| 查看次数: |
21380 次 |
| 最近记录: |