編寫命令行工具必備知識(shí)—Golang中獲取和返回狀態(tài)碼

命令行返回值
之前的文章《編寫命令行工具必備知識(shí)—Linux終端執(zhí)行命令后的返回值》講了終端執(zhí)行命令后會(huì)有對(duì)應(yīng)的返回值,這一點(diǎn)非常重要。當(dāng)在程序中調(diào)用系統(tǒng)命令行命令時(shí),可以根據(jù)返回值來(lái)知道命令執(zhí)行的結(jié)果并執(zhí)行不同的策略,所以編寫命令行工具時(shí)一定要返回對(duì)應(yīng)的狀態(tài)碼。
Golang中獲取調(diào)用系統(tǒng)命令狀態(tài)碼
golang的標(biāo)準(zhǔn)庫(kù)os/exec可以用于執(zhí)行系統(tǒng)命令行命令,舉一個(gè)調(diào)用系統(tǒng)的cp命令的例子,代碼如下:
如果沒(méi)有copy成功,error信息會(huì)輸出執(zhí)行命令的狀態(tài)碼。假如要copy的文件不存在,運(yùn)行代碼后輸出如下:
其中錯(cuò)誤信息 exit status 1 中的 1 就是執(zhí)行命令后返回的狀態(tài)碼。
Golang編寫命令行程序如何返回狀態(tài)碼
可能很多同學(xué)都寫過(guò)命令行工具,但知道給返回值的同學(xué)可能不多。沒(méi)有設(shè)置返回值的話默認(rèn)返回值就是0,也就意味著程序即使出錯(cuò),從返回值來(lái)看依然是執(zhí)行成功的,這樣就會(huì)帶來(lái)意想不到的問(wèn)題。
Golang中可以調(diào)用 os.Exit() 方法設(shè)置返回狀態(tài)碼,先看下官方的注釋:
即:
看個(gè)例子,假如程序檢測(cè)到操作系統(tǒng)是macOS時(shí)就停止運(yùn)行,提示不支持當(dāng)前系統(tǒng)并返回對(duì)應(yīng)的狀態(tài)碼2:


























