什么是用一些错误代码退出程序的惯用方法?退出错误代码在去?
退出操作的文件说,“该计划将立即终止;延迟功能无法运行。”,并log.Fatal只是调用退出。对于那些不可怕的错误,终止程序而不运行延迟函数似乎极端。
我应该在某个时候通过身边的一些状态表明,一直错误,然后调用exit(1),在那里我知道,我可以放心地离开,与已运行的所有推迟的功能呢?
什么是用一些错误代码退出程序的惯用方法?退出错误代码在去?
退出操作的文件说,“该计划将立即终止;延迟功能无法运行。”,并log.Fatal只是调用退出。对于那些不可怕的错误,终止程序而不运行延迟函数似乎极端。
我应该在某个时候通过身边的一些状态表明,一直错误,然后调用exit(1),在那里我知道,我可以放心地离开,与已运行的所有推迟的功能呢?
我一起在我最真实main
包的这些线路的东西,使return err
约定尽快通过,并有一个合适的终端:
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}
确实是。 os包提供了这个。
package main
import "os"
func main() {
os.Exit(1)
}
http://golang.org/pkg/os/#Exit
编辑:所以看起来你知道退出的。这篇文章给出了一个Panic的概述,它会让返回的函数在返回之前运行。将此与退出一起使用可能是您要查找的内容。 http://blog.golang.org/defer-panic-and-recover
正如FAS提到的,你必须从操作系统封装func Exit(exitcode int)
。
但是,如果您需要延迟执行的功能应用,你总是可以使用defer
keywork这样的:
http://play.golang.org/p/U-hAS88Ug4
你执行所有操作,影响一个错误变量,并在最后,当一切都清理完毕后,你可以安全地退出。
否则,你也可以使用恐慌/恢复: http://play.golang.org/p/903e76GnQ-
当你有一个错误,你恐慌,你清理结束,你赶上(恢复)它。
我想我明白你在第一种方法中的含义,但这个例子有点让我困惑。为什么推迟fct1()和fct2()?这意味着它们将以相反的顺序执行!看起来你打算[更像这样的东西](http://play.golang.org/p/02aNIyQ7K-),或者不是? – marczoid
在Python中我通常使用模式,其转换后的去看起来像这样:
func run() int {
// here goes
// the code
return 1
}
func main() {
os.Exit(run())
}
什么具有的'默认clean'并设置为'dirty'非致命错误全局变量的状态。在你的'main()'退出之前,你可以检查这个变量。不是很好,但在某些情况下它可能是最简单的解决方案。 (我很高兴的评论不能donwvoted :)) – topskip
是的,这基本上是我最终做的。我觉得不雅,因为我必须避免在主推迟任何东西(因为我仍然调用exit(1)设置返回代码,并没有想杀死我的递延FN),所以我坚持过去曾经是我的主要(只有三行,其中一个是延期)转化为函数。我希望有人会有更好的方式。到目前为止,有一人答道os.Exit,然后删除他们的答复,当我注释掉,我引用在我的岗位在os.Exit文档,并且现在有一个指向我os.Exit另一个答案。 – dan