【问题标题】:How can I further my understanding of why Go handles errors the way it does? [closed]我如何进一步理解为什么 Go 会以这种方式处理错误? [关闭]
【发布时间】:2015-08-19 08:37:19
【问题描述】:

我在 Google 上搜索了“Golang 错误”、“Go 错误处理”、“Go 错误”和“Go 错误详细”,以查看其他人对此主题的看法,并阅读了一些在线教程。

我也看过类似的 YouTube 视频:https://www.youtube.com/watch?v=Ph4eYD7Bgek

但我仍然不明白为什么我必须在我所做的一切之后添加这些行:

if err != nil {
    fmt.Println(err)
}

为什么这不会自动发生?而且我仍然无法理解为什么这种方式比 try, catch 更好。我来自 PHP 背景,在 PHP 中,我几乎从不进行错误检查,每次出现问题时它都会自动记录内容,那么为什么我必须在 Go 上手动进行呢?有什么好处?我真的很想 100% 地“开始”学习这门语言,但是一遍又一遍地编写相同的代码感觉太不对劲了。这与我所学到的编程知识背道而驰,不要重复自己。

我怎样才能更了解这一点?这样做的原因和好处是什么?如果有人举了一些情况的例子,也许我会理解为什么这种处理错误的方式是最好的方式,而不是尝试捕获,这种方式总比不检查要好,就像我在 PHP 中所做的那样。

而且我已经在 Go 的官方网站上阅读过。以及其他各种在线教程,例如:

https://gobyexample.com/

Oreilly 的视频教程。

来自 Pluralsight 的视频教程。

【问题讨论】:

  • “go 编程语言错误”提出了这个博客:blog.golang.org/errors-are-values
  • 这里不是一个很好的话题。这纯粹是一个设计决定。这是一些开发人员持有的主观价值。它体现在语言设计上。 Joel Spolsky 有一篇关于该主题的不错的博客,如果您观看 Robert Pike 所做的有关围棋的早期演示,他也会谈到它。
  • 我理解您的担忧,但无法回答您的“问题”并符合 stackoverflow 指南。这太主观了。相反,我建议您从您阅读和观看的教程中总结 5-7 个要点“为什么它好”,并写下您不同意的原因。
  • 基本上起点不对。 “为什么我必须在我所做的一切之后添加这些行” - 不,你没有。如果您对结果不感兴趣,没有人会强制您编写它们。如果你这样做,把它们写下来。但是你有兴趣,对吧?
  • "[...] 添加这些行[...] 为什么这不会自动发生?"因为它既不够(您只需在打印后继续),也不是唯一想要的(main 之外我很少想打印错误)。

标签: go


【解决方案1】:

我希望这是评论,但链接太多:

Blog post: Error handling and Go

Effective Go: Errors

SO Answer: Error returns

SO Question: Go — handling multiple errors elegantly?

SO Question: More terse error handling in Go

Blog post: Errors are values

Code Review Question: A minimal version control system

返回带有上下文的“错误处理程序”函数的函数:

func ger(ctxt string) func(string, error) error {
    return func(msg string, err error) error {
        return fmt.Errorf("%s : %s : %v", ctxt, msg, err)
    }
}

// And using it:
er := ger("Handling cmd")
er("Add", err)

...列表还在继续,请使用 Google 和 SO 搜索。

【讨论】:

  • 谢谢你,我会进一步阅读。
猜你喜欢
  • 2020-04-07
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-20
  • 2017-01-28
相关资源
最近更新 更多