我刚学习Go programming language。我刚刚读到error handling in Go的方式。有一个很好的解释,但我有一些混乱。 在Go中处理错误的典型方法是将错误返回为函数的第二个值:
f, err := Sqrt(-1)
if err != nil {
fmt.Println(err)
}
很简单。但是,假设我是一名图书馆开发人员,我可能想知道客户端我的函数可能会抛出一些错误,而客户端必须处理它。
在Java中,我有throws
子句。因此,客户必须将它放在那些try...catch
块
在Go中,我可以从函数返回错误;但是,如果图书馆的客户避免处理它,那么我该如何优雅地告诉他处理它呢?
修改 我正在探索一种语言。不要试图将Java的思维与Go结合起来,尊重每个人的理念。我刚问过,因为我想知道是否有任何关键词,因为我还没有学到很好。
答案 0 :(得分:7)
Go的哲学:如果开发人员发现函数返回错误,那么他有责任检查错误。编程语言不会强迫你这样做。
Rob Pike的背后推理是错误不是特殊的,因此,不需要专门的语言结构(即try/catch
)来处理错误。
答案 1 :(得分:7)
您的图书馆也应该通过其公开的功能将错误传回。您会注意到std库中的许多方法都有返回值和错误,因此人们应该习惯于处理错误。
如果你真的想要有类似于java的行为你可以使用panic(),但golang恐慌中的注意事项应仅用于不可恢复的错误或程序员错误(不是可以从中恢复的运行时错误)
无论哪种方式,您都无法强制客户端处理它。这是他们的责任。