如何从Go中的func main返回?

Mat*_*ner 18 go

如何main使用退出代码返回,就像在C中一样?上下文:我正在检查是否存在单个命令行参数,如果参数计数或参数无效,我将打印用法并返回错误状态代码.

Wol*_*lph 24

Go使用Exit功能.只需传递状态代码作为参数,你就完成了:)

  • 这可能在许多情况下有效但并非全部:当你只是os.Exit()时,冲洗记录器/关闭文件的事情不会发生.推迟不运行. (5认同)
  • 你可以做这样的事情https://github.com/anacrolix/torrent/blob/master/cmd/torrentfs/main.go#L78 (2认同)

Gur*_*ngh 14

正确的答案在Matt Joiner的链接中.基本上是以下代码段.一个人必须保证代码是其他地方根本叫os.Exit()的任何地方,像flag.ExitOnError,log.Fatalf()等.

func main() { os.Exit(mainReturnWithCode()) }

func mainReturnWithCode() int {
    // do stuff, defer functions, etc.
    return exitcode // a suitable exit code
}
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,如果 Go 强迫你编写这样的函数来执行所有“延迟”的资源释放,那么它就有点缺陷。让 main() 返回 int 会更容易,而且我知道的所有操作系统都支持它。 (3认同)
  • 目的是您返回例如 1、2 或 0 而不是`exitcode`,后者只是一个占位符。 (2认同)