首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在log.Panic()或log.Fatal()与os.Open一起使用吗?

我应该在log.Panic()或log.Fatal()与os.Open一起使用吗?
EN

Stack Overflow用户
提问于 2019-09-19 11:45:41
回答 2查看 4K关注 0票数 2

当我们有:

代码语言:javascript
运行
复制
f, err := os.Open("no-file.txt")
if err != nil {
    log.Panic(err)
}
defer f.Close()

我认为使用log.Panic(错误)更有意义。对吗?f.Close()允许延迟执行log.Fatal(),但log.Fatal()阻止它执行。

或者如果找不到文件就不会打开?我想在这种情况下,如果我们使用致命或恐慌的话,那就无关紧要了。对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 11:54:42

log.Fatal()不应该在生产应用中使用--如果有的话--因为它终止了整个应用程序。在执行日志之后,log.Panic()会恐慌,这也是很少需要的。

许多示例使用它们(或者是单个panic(err)调用)来缩短示例代码(让您关注示例的内容),但是在生产应用程序中应该尽量少使用它们。相反,要“正确”地处理错误。这意味着用例特定,您可以选择记录它并返回,或者返回一个新错误或做其他事情,但是只使用它做一件事情(只处理一次)。见Writing good Golang code

票数 8
EN

Stack Overflow用户

发布于 2019-09-19 12:24:49

我更喜欢log.Panic()。

log.Panic vs log.Fatal本质上是对os.Exit(1)的恐慌。

更糟糕的是,Panic.It也使测试变得更加困难,更难处理其他代码。退出非常简单,通过恢复来阻止测试中的恐慌。

所以,最好选择一些能减少潜在伤害的东西。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58010284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档