我如何进一步理解Go为什么以这种方式处理错误?

我如何进一步理解Go为什么以这种方式处理错误?,go,Go,我在谷歌上搜索了“Golang errors”、“Go error handling”、“Go errors”和“Go error verbose”,以了解其他人对该主题的看法,并在网上阅读了一些教程 我还观看了YouTube视频,如: 但我仍然不明白,为何在我做了这么多之后还要加上这些字句: if err != nil { fmt.Println(err) } 为什么这不是自动发生的?我仍然无法理解为什么这种方式比尝试、抓住更好。我有PHP的背景,在PHP中,我几乎从来没有做过错误检

我在谷歌上搜索了“Golang errors”、“Go error handling”、“Go errors”和“Go error verbose”,以了解其他人对该主题的看法,并在网上阅读了一些教程

我还观看了YouTube视频,如:

但我仍然不明白,为何在我做了这么多之后还要加上这些字句:

if err != nil {
    fmt.Println(err)
}
为什么这不是自动发生的?我仍然无法理解为什么这种方式比尝试、抓住更好。我有PHP的背景,在PHP中,我几乎从来没有做过错误检查,每次出错都会自动记录,所以为什么我必须在运行中手动记录?有什么好处?我真的很想百分之百地学习这门语言,但是一遍又一遍地写同样的代码感觉很不对。这与我所学到的编程知识背道而驰,就是不要重复自己

我怎样才能更了解这一点?这样做的原因和好处是什么?如果有人举了一些例子,说明为什么这种处理错误的方法是最好的方法,而不是try-catch,我可能会理解,这种方法比根本不检查要好,就像我在PHP中做的那样

我已经在Go的官方网站上看到了。以及各种其他在线教程,如:

奥雷利的视频教程


Pluralsight的视频教程。

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

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

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)

…列表还在继续,请使用谷歌搜索。

“go programming language errors”带来了这个博客:这里不是一个很好的话题。这纯粹是一个设计决策。这是一些开发人员持有的主观价值。它体现在语言设计上。Joel Spolsky在这个话题上有一个很好的博客,如果你看Robert Pike关于Go的早期演示,他也会提到。我理解你的担忧,但不可能回答你的“问题”,也不可能符合stackoverflow的指导方针。这太主观了。我的建议是,从你阅读和观看的教程中总结5-7个要点“为什么它好”,并写下你不同意的原因。基本上,出发点是不正确的。“为什么我必须在我做的每件事之后添加这些行”-不,你没有。如果你对结果不感兴趣,没有人强迫你写。如果有,就写下来。但是你很感兴趣,对吗?“[…]添加这些行[…]为什么这不会自动发生?”因为这既不够(打印后继续),也不是唯一需要的(在
main
之外,我很少想打印错误)。谢谢你,我将进一步阅读。