当我们有:
f, err := os.Open("no-file.txt")
if err != nil {
log.Panic(err)
}
defer f.Close()我认为使用log.Panic(错误)更有意义。对吗?f.Close()允许延迟执行log.Fatal(),但log.Fatal()阻止它执行。
或者如果找不到文件就不会打开?我想在这种情况下,如果我们使用致命或恐慌的话,那就无关紧要了。对吗?
发布于 2019-09-19 11:54:42
log.Fatal()不应该在生产应用中使用--如果有的话--因为它终止了整个应用程序。在执行日志之后,log.Panic()会恐慌,这也是很少需要的。
许多示例使用它们(或者是单个panic(err)调用)来缩短示例代码(让您关注示例的内容),但是在生产应用程序中应该尽量少使用它们。相反,要“正确”地处理错误。这意味着用例特定,您可以选择记录它并返回,或者返回一个新错误或做其他事情,但是只使用它做一件事情(只处理一次)。见Writing good Golang code。
发布于 2019-09-19 12:24:49
我更喜欢log.Panic()。
log.Panic vs log.Fatal本质上是对os.Exit(1)的恐慌。
更糟糕的是,Panic.It也使测试变得更加困难,更难处理其他代码。退出非常简单,通过恢复来阻止测试中的恐慌。
所以,最好选择一些能减少潜在伤害的东西。
https://stackoverflow.com/questions/58010284
复制相似问题