Go 用flag包解析命令列引數

2021-08-10 12:15:07 字數 2236 閱讀 8755

flag包能解析的引數有如下四種形式,使用的時候分三種型別:

型別一

cmd -flag=x // 支援所有型別

cmd -flag x // 只支援非bool型別

型別二

cmd -flag // 只支援bool型別

型別三

cmd abc // 沒有flag的引數

cmd -flag=x

cmd -flag x //只支援非bool型別

有兩種形式,下方***代表型別

flag.***()

flag.string(), bool(), int() 這種形式返回乙個指向該引數的指標

例子

var date = flag.int("d", 20171107, "help message for date") 

flag.parse()

注意 date 是指向 -d 引數值的指標

若在命令列輸入-d=20121212 -a=20或者-d 20121212 -a 20,則我們在程式中即可用 *date 取得 -d 的值20121212

若只輸入-a=20或者-a 20,因為預設標誌-d,則 *date 取到的是 -d 定義中的預設值 20171107

flag.***var()

flag.stringvar(), boolvar(), intvar() 這種形式把引數繫結到乙個變數

例子

var age int

flag.intvar(&age, "a", 18, "help message for age")

flag.parse()

命令列輸入-d=20121212 -a=20或者-d=20121212 -a 20,在程式裡 變數age 則獲取到 -a 的值 20

若只輸入-d=20121212或者-d=20121212,預設標誌-a, 則 變數age 獲取定義中的預設值 18

注意到上面例子最後都帶有一行 flag.parse()

因為定義好引數後,只有呼叫方法 flag.parse() 解析命令列引數到定義的flag,這樣我們才能使用上面兩個例子的 *date 和 age 取得對應flag的引數值

cmd -flag //該形式只支援bool型別,對應的值是1, 0, t, f, true, false, true, false, true, false

預設的,如果我們在命令列裡提供了-flag,則其對應的值為true,否則為flag.bool/boolvar中指定的預設值;如果希望顯示設定為false則使用-flag=false。

例子

var exist_f = flag.bool("f", false, "help message for format")

flag.parse()

當在命令列輸入-d=123 -f時,程式裡 *exist_f 的值就為 true 了

若命令列只輸入-d=123時,因為預設-f,*exist_f 的值為事先定義中預設的 false

cmd abc //沒有flag的引數

通過 flag.args() 獲取非flag引數列表

通過 flag.arg(i) 來獲取非flag命令列第i個引數,i 從 0 開始

還可以通過flag.narg() 獲得非flag引數個數

例子當命令列敲入-d 20121212 -a 20 huang jiaming,最後兩個值即為不帶標誌的引數

...

flag.parse()

var fullname = flag.args() // fullname = ['huang', 'jiaming']

var firstname = flag.arg(0) // firstname = huang

var lastname = flag.arg(1) // lastname = jiaming

var num = flag.narg() // num = 2

Go解析命令列引數 flag包

在寫命令列程式 工具 server 時,對命令列引數進行解析,是一種常見的需求。各種語言一般都會提供相應的方法或庫,以方便開發者使用。在go標準庫中提供了乙個包 flag,方便進行命令列解析。也就是說,go的flag包用來解析命令列引數。命令列flag的語法有如下三種形式 flag 只支援bool型...

go 命令列解析工具包flag

在學習用go寫乙個jvm的時候,看到乙個go解析命令列的工具包flag包,記錄一下 flag包有兩種方式 1 flag.其中 可以是int string等 返回乙個相應型別的指標,如 cpvalue flag.strin ar cp classpath 第乙個引數cp是名字 第二個引數是預設值 第三...

Golang 使用flag包進行命令列引數解析

最近在使用go開發cli command line inte ce 時,通過對於官方文件以及他人部落格的學習,在此寫下個人認為更適合自己往後回顧的關於flag的使用說明。package main import fmt flag func main 從main往下看 第一句代表我們需要乙個w的命令列引...