我才刚刚开始使用Go。我的代码开始有很多这样的东西:
if err != nil {
//handle err
}或者这个
if err := rows.Scan(&some_column); err != nil {
//handle err
}在Go中有没有一些检查和处理错误的好习惯/策略/最佳实践?
编辑以澄清:我不是在抱怨或建议Go团队拿出更好的东西。我在问我是不是做对了,还是我错过了社区提出的一些技术。谢谢大家。
发布于 2013-06-06 21:31:30
您的代码是惯用的,在我看来,这是可用的最佳实践。有些人肯定不同意,但我认为这是the standard libraries in Golang上常见的风格。换句话说,Go作者用这种方式编写错误处理。
发布于 2015-03-04 12:25:58
在这个问题被问到六个月后,Rob Pike写了一篇题为Errors are Values的博客文章。
在那里,他认为你不需要以OP提出的方式编程,并提到了标准库中的几个地方,在那里他们使用了不同的模式。
当然,涉及错误值的常见语句是测试它是否为空,但人们可以对错误值做无数其他的事情,应用其中的一些其他事情可以使您的程序更好,消除了使用死记硬背的if语句检查每个错误时出现的大部分样板。
..。
使用该语言来简化错误处理。
但请记住:无论你做什么,都要检查你的错误!
这是一本好书。
发布于 2013-06-06 22:42:33
我同意jnml的回答,即它们都是惯用代码,并添加以下内容:
您的第一个示例:
if err != nil {
//handle err
}在处理多个返回值时更加惯用。例如:
val, err := someFunc()
if err != nil {
//handle err
}
//do stuff with val当仅处理err值时,您的第二个示例是很好的速记。这适用于函数只返回error,或者故意忽略error以外的返回值的情况。例如,这有时与Reader和Writer函数一起使用,这两个函数返回写入字节数的int (有时是不必要的信息)和error
if _, err := f.Read(file); err != nil {
//handle err
}
//do stuff with f第二种形式称为使用if initialization statement。
关于最佳实践,据我所知(除了在你需要的时候使用"errors"包创建新的错误),你已经涵盖了关于Go中错误的几乎所有你需要知道的东西!
编辑:如果你发现你真的不能没有异常,你可以用defer,panic & recover来模仿它们。
https://stackoverflow.com/questions/16963298
复制相似问题