在Go语言中如何以非零且非1的状态码退出程序?
在Go语言中如何以非零且非1的状态码退出程序?
嘿,我来给你掰扯清楚这个事儿!你现在碰到的情况我懂——用go run跑代码时,设os.Exit(1)会看到终端额外输出exit status 1,而且你想搞明白怎么用比如2、3这类非零也非1的状态码退出,对吧?
首先明确一点:直接用os.Exit(你想要的状态码)完全可行,比如你想返回状态码2,就写os.Exit(2)。咱们拿你的代码改改试试:
import "strconv" import "os" import "fmt" func main() { svcRc := 2 fmt.Println("my rc=" + strconv.Itoa(svcRc)) os.Exit(svcRc) }
用go run . ; echo $?运行的话,你会看到这样的输出:
my rc=2 exit status 2 2
这里的exit status 2是go run命令自己打印的提示,不是你的程序输出的,但你看最后一行的echo $?结果确实是2——这说明你的程序已经成功把状态码2返回给shell了。
那要是不想看到go run弹出的这个exit status提示怎么办?很简单,先编译成二进制文件再运行就行:
# 编译成可执行文件 go build -o myapp . # 直接运行二进制 ./myapp ; echo $?
这时候输出就干净了:
my rc=2 2
完全没有多余的提示,状态码也正确返回。
总结一下:
- 不管是1还是其他非零状态码,用
os.Exit(N)都能让程序以状态码N退出 go run在程序非零退出时会额外打印exit status N,但这是go run的行为,不影响shell获取正确的退出码- 想去掉这个额外提示,就先编译再运行二进制文件
备注:内容来源于stack exchange,提问作者JohnA
相关产品推荐
相关产品推荐

