在Go中退出应用程序的方法

2,367 阅读2分钟

要在Go中退出一个程序,可以使用 os.Exit()函数从 os包中的函数。它可以使程序立即终止。该函数需要一个状态代码作为参数,代码为零表示成功,非零表示错误。

func Exit(code int)

os.Exit()函数会立即终止一个应用程序,这意味着如果有任何延迟的函数,它们不会被运行。

状态代码

通常,状态代码0 表示无错误退出,1 表示有一般错误退出。你可以随心所欲地设置状态代码,但要记住,有些状态代码有特殊含义,你可以在这里查看。

例子

以状态代码退出0

package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Hello gosamples.dev")
os.Exit(0)
fmt.Println("Bye gosamples.dev")
}

输出:

Hello gosamples.dev

正如你在输出中看到的,应用程序在调用了 os.Exit().main() 函数的最后一行从未被执行。

以状态代码退出1

package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("Hello gosamples.dev")
os.Exit(1)
fmt.Println("Bye gosamples.dev")
}

输出:

Hello gosamples.dev
exit status 1

当关闭一个状态代码不是0 的应用程序时,我们会在输出中看到一个额外的信息exit status <code> ,表明该应用程序因错误而终止了。

什么时候使用os.Exit() ,什么时候使用panic()?

  • os.Exit()函数立即终止程序,没有恢复和运行延迟函数的可能性。应用程序返回一个错误代码,其他程序可以读取以检查发生了什么。
  • panic()函数用于报告程序中不可恢复的错误,例如,运行时的错误,如索引一个片断超出范围。它立即停止当前函数的执行,并开始解开goroutine栈,沿途运行任何延迟的函数。如果解开的过程到达了goroutine的堆栈顶部,程序就会死亡。

通常情况下,当你的应用程序达到一个不可恢复的状态,并且由于特定的错误而无法继续,你应该使用 panic()函数。使用 panic(),应用程序优雅地关闭,所有延迟的函数都被执行,并且应用程序在输出端打印出准确的错误信息。而 os.Exit()函数,它可以立即关闭应用程序,当你需要从你的应用程序中获得一个可以被其他脚本读取的错误代码时可以使用。它也可以用于你的应用程序已经完成了它应该做的一切,现在只需要退出,比如在将结果写入标准输出后,或者当用户运行一个命令来关闭应用程序。