【发布时间】:2013-09-28 15:05:26
【问题描述】:
退出带有一些错误代码的程序的惯用方法是什么?
Exit 的文档说“程序立即终止;延迟函数不运行。”,log.Fatal 只是调用Exit。对于不是令人发指的错误,在不运行延迟函数的情况下终止程序似乎很极端。
我是否应该传递一些指示存在错误的状态,然后在我知道可以安全退出的某个时间点调用Exit(1),并且所有延迟函数都已运行?
【问题讨论】:
-
如果全局变量状态默认为
clean,在非致命错误时设置为dirty。在您的main()退出之前,您可以检查该变量。不是很好,但在某些情况下它可能是最简单的解决方案。 (我很高兴 cmets 不能被投反对票 :)) -
是的,这基本上就是我最终所做的。我觉得它不优雅,因为我必须避免延迟 main 中的任何内容(因为我仍然调用 Exit(1) 来设置返回码,并且不想杀死我的延迟 fn),所以我坚持了曾经是我的 main (这只有三行,其中之一是延迟)到一个函数中。我希望有人会有更好的方法。到目前为止,一个人回复了 os.Exit,然后当我评论我在帖子中引用 os.Exit 文档时删除了他们的回复,现在还有另一个答案指向我 os.Exit。
标签: error-handling go exit