日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
編寫(xiě)命令行工具必備知識(shí)—Golang中獲取和返回狀態(tài)碼

命令行返回值

之前的文章《編寫(xiě)命令行工具必備知識(shí)—Linux終端執(zhí)行命令后的返回值》講了終端執(zhí)行命令后會(huì)有對(duì)應(yīng)的返回值,這一點(diǎn)非常重要。當(dāng)在程序中調(diào)用系統(tǒng)命令行命令時(shí),可以根據(jù)返回值來(lái)知道命令執(zhí)行的結(jié)果并執(zhí)行不同的策略,所以編寫(xiě)命令行工具時(shí)一定要返回對(duì)應(yīng)的狀態(tài)碼。

創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)定制設(shè)計(jì),是成都網(wǎng)站維護(hù)公司,為成都紙箱提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站營(yíng)銷(xiāo)推廣熱線:13518219792

Golang中獲取調(diào)用系統(tǒng)命令狀態(tài)碼

golang的標(biāo)準(zhǔn)庫(kù)os/exec可以用于執(zhí)行系統(tǒng)命令行命令,舉一個(gè)調(diào)用系統(tǒng)的cp命令的例子,代碼如下:

err := exec.Command("cp", "./test.go", "../test/test.go").Run()
if err != nil {
println(err.Error())
}

如果沒(méi)有copy成功,error信息會(huì)輸出執(zhí)行命令的狀態(tài)碼。假如要copy的文件不存在,運(yùn)行代碼后輸出如下:

$ go run main.go
exit status 1

其中錯(cuò)誤信息 exit status 1 中的 1 就是執(zhí)行命令后返回的狀態(tài)碼。

Golang編寫(xiě)命令行程序如何返回狀態(tài)碼

可能很多同學(xué)都寫(xiě)過(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)碼,先看下官方的注釋?zhuān)?/p>

// Exit causes the current program to exit with the given status code.
// Conventionally, code zero indicates success, non-zero an error.
// The program terminates immediately; deferred functions are not run.
//
// For portability, the status code should be in the range [0, 125].

即:

// Exit 使當(dāng)前程序停止運(yùn)行,返回給定的狀態(tài)碼。
// 按照慣例,0表示成功,非0表示錯(cuò)誤。
// 程序立即停止運(yùn)行;之后的defer函數(shù)不再被運(yùn)行。
//
// 為了可移植性,狀態(tài)碼的范圍應(yīng)該是[0,125]。

看個(gè)例子,假如程序檢測(cè)到操作系統(tǒng)是macOS時(shí)就停止運(yùn)行,提示不支持當(dāng)前系統(tǒng)并返回對(duì)應(yīng)的狀態(tài)碼2:

package main

import (
"os"
"runtime"
)

func main() {
recode := 0
defer func() { os.Exit(recode) }()

goos := runtime.GOOS
if goos == "darwin" {
recode = 2
println("unsupported platform")
return
}
println("success")
}

名稱(chēng)欄目:編寫(xiě)命令行工具必備知識(shí)—Golang中獲取和返回狀態(tài)碼
本文來(lái)源:http://www.5511xx.com/article/copoicc.html