您好,登錄后才能下訂單哦!
在寫命令行程序(工具、server)時,對命令參數(shù)進行解析是常見的需求。各種語言一般都會提供解析命令行參數(shù)的方法或庫,以方便程序員使用。如果命令行參數(shù)純粹自己寫代碼來解析,對于比較復(fù)雜的,還是挺費勁的。在 go 標(biāo)準(zhǔn)庫中提供了一個包:flag,方便進行命令行解析。
命令行語法
命令行語法主要有以下幾種形式
-flag //只支持bool類型 -flag=x -flag x //只支持非bool類型
以上語法對于一個或兩個‘-’號,效果是一樣的,但是要注意對于第三種情況,只支持非bool類型,原因是碰到如下情況時
cmd -x *
*為0,false有可能表示一個文件名或文件,也有可能表示x標(biāo)簽的值為0或false,會產(chǎn)生二義性,因此規(guī)定第三種只支持非bool類型。對于整形flag,合法的值可以為1234, 0664,0x1234或負數(shù)等。對于布爾型flag,可以為1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等
命令行參數(shù)解析方法
使用flag主要包括以下幾步
定義flag參數(shù),有三種方式
通過flag.String(), Bool(), Int() 等flag.Xxx()方法,該種方式返回一個相應(yīng)的指針
import "flag" var ip = flag.Int("flagname", 1234, "help message for flagname")
通過flag.XxxVar()方法將flag綁定到一個變量,該種方式返回值類型,如
var flagvar int func init() { flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname") }
通過flag.Var()綁定自定義類型,自定義類型需要實現(xiàn)Value接口(Receives必須為指針),如
flag.Var(&flagVal, "name", "help message for flagname")
對于這種類型的flag,默認(rèn)值為該變量類型的初始值
調(diào)用flag.Parse()解析命令行參數(shù)到定義的flag
flag.Parse()
解析函數(shù)將會在碰到第一個非flag命令行參數(shù)時停止,非flag命令行參數(shù)是指不滿足命令行語法的參數(shù),如命令行參數(shù)為cmd --flag=true abc則第一個非flag命令行參數(shù)為“abc”
調(diào)用Parse解析后,就可以直接使用flag本身(指針類型)或者綁定的變量了(值類型)
fmt.Println("ip has value ", *ip) fmt.Println("flagvar has value ", flagvar)
還可通過flag.Args(), flag.Arg(i)來獲取非flag命令行參數(shù)
以上就是golang flag是什么的詳細內(nèi)容,更多請關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。