在寫(xiě)命令行程序(工具、server)時(shí),對(duì)命令參數(shù)進(jìn)行解析是常見(jiàn)的需求。各種語(yǔ)言一般都會(huì)提供解析命令行參數(shù)的方法或庫(kù),以方便程序員使用。如果命令行參數(shù)純粹自己寫(xiě)代碼來(lái)解析,對(duì)于比較復(fù)雜的,還是挺費(fèi)勁的。在 go 標(biāo)準(zhǔn)庫(kù)中提供了一個(gè)包:flag,方便進(jìn)行命令行解析。
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、江岸網(wǎng)站維護(hù)、網(wǎng)站推廣。
命令行語(yǔ)法
命令行語(yǔ)法主要有以下幾種形式
-flag //只支持bool類(lèi)型 -flag=x -flag x //只支持非bool類(lèi)型
以上語(yǔ)法對(duì)于一個(gè)或兩個(gè)‘-’號(hào),效果是一樣的,但是要注意對(duì)于第三種情況,只支持非bool類(lèi)型,原因是碰到如下情況時(shí)
cmd -x *
*為0,false有可能表示一個(gè)文件名或文件,也有可能表示x標(biāo)簽的值為0或false,會(huì)產(chǎn)生二義性,因此規(guī)定第三種只支持非bool類(lèi)型。對(duì)于整形flag,合法的值可以為1234, 0664,0x1234或負(fù)數(shù)等。對(duì)于布爾型flag,可以為1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等
命令行參數(shù)解析方法
使用flag主要包括以下幾步
定義flag參數(shù),有三種方式
通過(guò)flag.String(), Bool(), Int() 等f(wàn)lag.Xxx()方法,該種方式返回一個(gè)相應(yīng)的指針
import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname")
通過(guò)flag.XxxVar()方法將flag綁定到一個(gè)變量,該種方式返回值類(lèi)型,如
var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") }
通過(guò)flag.Var()綁定自定義類(lèi)型,自定義類(lèi)型需要實(shí)現(xiàn)Value接口(Receives必須為指針),如
flag.Var(&flagVal, "name", "help message for flagname")
對(duì)于這種類(lèi)型的flag,默認(rèn)值為該變量類(lèi)型的初始值
調(diào)用flag.Parse()解析命令行參數(shù)到定義的flag
flag.Parse()
解析函數(shù)將會(huì)在碰到第一個(gè)非flag命令行參數(shù)時(shí)停止,非flag命令行參數(shù)是指不滿(mǎn)足命令行語(yǔ)法的參數(shù),如命令行參數(shù)為cmd --flag=true abc則第一個(gè)非flag命令行參數(shù)為“abc”
調(diào)用Parse解析后,就可以直接使用flag本身(指針類(lèi)型)或者綁定的變量了(值類(lèi)型)
fmt.Println("ip has value ", *ip) fmt.Println("flagvar has value ", flagvar)
還可通過(guò)flag.Args(), flag.Arg(i)來(lái)獲取非flag命令行參數(shù)
以上就是golang flag是什么的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!