這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
一、命令列文法
命令列文法主要有以下幾種形式:
cmd -flag //只支援bool類型cmd -flag=xcmd -flag x //只支援非bool類型
以上文法對於一個或兩個‘-’號是一樣的
對於整形flag,合法的值可以為1234,0664,0x1234或負數等。對於布爾型flag,可以為1,0,t,f,T,F,true,false,TRUE,FALSE,True,False等
二、命令列參數方法
(1)定義flag參數
參數有三個:第一個為參數名稱,第二個為預設值,第三個是說明
(1) 通過flag.String(),Bool(),Int() 等flag.Xxx()方法,該種方式返回一個相應的指標
var ip = flag.Int("flagname", 1234, "help message for flagname")
(2) 通過flag.XxxVar()方法將flag綁定到一個變數,該種方式傳回值類型,如
var flagvar intflag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
(3) 通過flag.Var()綁定自訂類型,自訂類型需要實現Value介面(Receives必須為指標),如
flag.Var(&flagVal, "name", "help message for flagname")
(2)調用flag.Parse()解析命令列參數到定義的flag
flag.Parse()
解析函數將會在碰到第一個非flag命令列參數時停止,非flag命令列參數是指不滿足命令列文法的參數,如命令列參數為cmd --flag=true abc則第一個非flag命令列參數為“abc”
(3)調用Parse解析後,就可以直接使用flag本身(指標類型)或者綁定的變數了(實值型別)
fmt.Println("flagvar has value ", flagvar)
還可通過flag.Args(), flag.Arg(i)來擷取非flag命令列參數
三、執行個體
package mainimport ( "flag" "fmt") func main() { username := flag.String("name", "", "Input your username") flag.Parse() fmt.Println("Hello, ", *username)}
編譯:
go build flag.go
運行:
./flag -name=world
輸出:
Hello, world