这看起来有点愚蠢,肯定有更好的方法吗?
err = SendMessageAndWait(db, "this is a test")
if err != nil {
fmt.Println("Error sending message", err)
return
}
err = DoSomething(db, "this is a test")
if err != nil {
fmt.Println("Error sending message", err)
return
}
err = CheckSomething(db, "this is another test")
if err != nil {
fmt.Println("Error sending message", err)
return
}
err = SendMessageAndWait(db, "this is a third test")
if err != nil {
fmt.Println("Error sending message", err)
return
}
... x10 ...
5 回答
可悲的是,这就是Go的方式,但是在某种程度上你可以让它更清洁:
我不会只是打印错误而不返回任何内容:想法是对错误采取行动并将其返回(如果没有采取果断行动,就像一个简单的日志) .
简单地调用
return
就像完全忽略错误一样,就应用程序的其余部分而言 .请参阅“Best Practices for Errors in Go”,其中包含以下建议:
预定义错误
提供信息
自定义错误类型是解决此问题的最佳方法 . Go的隐式接口使创建简单
提供堆栈跟踪
(您在dropbox/godropbox/errors/errors.go中具有相同的功能)
在Go中,始终检查错误 . 例如,
鉴于你缺乏背景,我只能假设你从
func main()
返回 .http://play.golang.org/p/pgcwMb647A
通常,显式处理是可行的方法,但根据上下文,您可以执行各种操作 .
冒着把它变成代码高尔夫的风险,Go支持带有赋值的单行if语句:
缺点是分配的所有返回值都限定在相应的
if
/else if
/else
块中,因此如果您在该块之外实际需要不同的返回值,则必须更接近PeterSO的答案 .