什么是Go等同于' throws'条款?

时间:2016-06-21 19:06:01

标签: java exception go exception-handling throws

我刚学习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结合起来,尊重每个人的理念。我刚问过,因为我想知道是否有任何关键词,因为我还没有学到很好。

2 个答案:

答案 0 :(得分:7)

Go的哲学:如果开发人员发现函数返回错误,那么他有责任检查错误。编程语言不会强迫你这样做。

Rob Pike的背后推理是错误不是特殊的,因此,不需要专门的语言结构(即try/catch)来处理错误。

答案 1 :(得分:7)

您的图书馆也应该通过其公开的功能将错误传回。您会注意到std库中的许多方法都有返回值和错误,因此人们应该习惯于处理错误。

如果你真的想要有类似于java的行为你可以使用panic(),但golang恐慌中的注意事项应仅用于不可恢复的错误或程序员错误(不是可以从中恢复的运行时错误)

无论哪种方式,您都无法强制客户端处理它。这是他们的责任。