【问题标题】:Is it idiomatic in go to handle all returned errors?处理所有返回的错误是惯用的吗?
【发布时间】:2017-03-01 17:21:54
【问题描述】:

go 中的许多函数返回错误以适应接口,但这些错误始终为零。是否仍应检查这些错误?

这方面的一个例子是crypto/sha1 Write() function,它不设置错误值。所以代码不需要是:

_, err = sha1Hasher.Write(buffer)
if err != nil {
    log.Printf("sha1 could not be calculated (%s)", err)
}

但只有:

sha1Hasher.Write(buffer)

第二个选项更短更简洁,go 中的代码很简单,但建议处理所有错误:

但请记住:无论您做什么,都要检查您的错误!

https://blog.golang.org/errors-are-values

显然,我们必须处理任何错误;我们不能忽视它们。

https://stackoverflow.com/a/16126516/4944254

最好的方法是什么?

【问题讨论】:

  • 您不需要处理不可能发生或无法处理的错误。 digest.Write 方法只返回一个错误以符合io.Writer 接口。您通常也不会看到任何人检查来自 fmt.Println 的错误。
  • 这对你来说是一本好书dave.cheney.net/2016/04/27/…

标签: go error-handling


【解决方案1】:

在您描述的情况下,不检查错误可能会很好,就像使用fmt.Println 时不检查错误一样。

但是,当您使用fmt.Println 时,您知道正在使用哪些具体实现。当您使用Writer 接口(@98​​7654324@ 实现)时 - 您不能假设实现是否会返回任何错误。在这种情况下,恕我直言,您应该经常检查错误。

顺便说一句,写入fmt.Print 使用的os.Stdout 可能会失败(可能可以将os.Stdout 的值替换为其他值)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-08
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多