【发布时间】:2016-10-23 11:41:42
【问题描述】:
我只是在学习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 混为一谈,并尊重每个人的做事哲学。我只是问,因为我还没有学好Go,所以我想知道是否有任何关键字。
【问题讨论】:
-
这就是 Go 的哲学:如果开发人员看到函数返回错误,那么他有责任检查它。编程语言不会强迫你这样做。
-
检查异常是 Java 独有的特性,其他编程语言都没有。换句话说:在 Go 或除 Java 之外的任何其他编程语言中,没有与
throws子句等效的语句。 -
@KrupalShah:在 Go 中,返回值之一是错误的事实表明该函数不能保证成功。我可以理解这感觉很奇怪而且过于乐观,尤其是对于 Java 开发人员来说,但你会习惯的。对我来说,我一直讨厌异常,因为它们必须在每个嵌套级别进行处理。
-
@KrupalShah:这是主观的,所以我能提供的唯一真正的建议是“不要在 Go 中编写 Java”
-
@JimB 不,我只是在探索一种语言。不要试图将 Java 的思想与 Go 混为一谈,并尊重每个人的做事哲学。我只是问,因为我还没有学好Go,所以我想知道是否有任何关键字。
标签: java exception go exception-handling throws