深入解析golang中的標(biāo)準(zhǔn)庫(kù)flag
Go語言內(nèi)置的flag包實(shí)現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡(jiǎn)單。
os.Args
如果你只是簡(jiǎn)單的想要獲取命令行參數(shù),可以像下面的代碼示例一樣使用os.Args來獲取命令行參數(shù)。
func main() {
// 獲取命令行參數(shù)
// os.Args:[]string
if len(os.Args) > 0 {
for i, v := range os.Args {
fmt.Println(i, v)
}
}
}
執(zhí)行命令:go run .\main.go host:127.0.0.1 port:8080
輸出結(jié)果:
?C:\Users\mayanan\AppData\Local\Temp\go-build3549800423\b001\exe\main.exe?host:127.0.0.1?port:8080
os.Args是一個(gè)存儲(chǔ)命令行參數(shù)的字符串切片,它的第一個(gè)元素是執(zhí)行文件的名稱。
flag包基本使用
1.flag參數(shù)類型
flag包支持的命令行參數(shù)類型有bool、int、int64、uint、uint64、float float64、string、duration。
| flag參數(shù) | 有效值 |
|---|---|
| 字符串flag | 合法字符串 |
| 整數(shù)flag | 1234、0664、0x1234等類型,也可以是負(fù)數(shù)。 |
| 浮點(diǎn)數(shù)flag | 合法浮點(diǎn)數(shù) |
| bool類型flag | 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。 |
| 時(shí)間段flag | 任何合法的時(shí)間段字符串。如”300ms”、”-1.5h”、”2h45m”。 合法的單位有”ns”、”us” /“μs”、”ms”、”s”、”m”、”h”。 |
定義命令行flag參數(shù)
flag.Type()
基本格式如下:
flag.Type(flag名, 默認(rèn)值, 幫助信息)*Type例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:
func main() {
// flag.Type() 的使用
name := flag.String("name", "張三", "姓名")
age := flag.Int("age", 18, "年齡")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "時(shí)間間隔")
flag.Parse()
fmt.Println(*name, *age, *married, *delay)
}
終端輸入:
go run .\main.go -name lisi --age 88 -married=true --d=15s
輸出:
lisi 88 true 15s
flag.TypeVar()
基本格式如下: flag.TypeVar(Type指針, flag名, 默認(rèn)值, 幫助信息) 例如我們要定義姓名、年齡、婚否三個(gè)命令行參數(shù),我們可以按如下方式定義:
func main() {
var name string
var age uint
var married bool
var d time.Duration
flag.StringVar(&name, "name", "王五", "姓名")
flag.UintVar(&age, "age", 18, "年齡")
flag.BoolVar(&married, "m", false, "婚否")
flag.DurationVar(&d, "duration", 0, "時(shí)間間隔")
flag.Parse()
fmt.Println(name, age, married, d)
}
輸入:
go run .\main.go -name lisi --age 35 -m=true --duration=1h15m36s
輸出:
lisi 35 true 1h15m36s
flag.Parse()
通過以上兩種方法定義好命令行flag參數(shù)后,需要通過調(diào)用flag.Parse()來對(duì)命令行參數(shù)進(jìn)行解析。
支持的命令行參數(shù)格式有以下幾種:
-flag xxx (使用空格,一個(gè)-符號(hào))
--flag xxx (使用空格,兩個(gè)-符號(hào))
-flag=xxx (使用等號(hào),一個(gè)-符號(hào))
--flag=xxx (使用等號(hào),兩個(gè)-符號(hào))
其中,布爾類型的參數(shù)必須使用等號(hào)的方式指定。
Flag解析在第一個(gè)非flag參數(shù)(單個(gè)”-“不是flag參數(shù))之前停止,或者在終止符”–“之后停止。
flag其他函數(shù)
- flag.Args() ////返回命令行參數(shù)后的其他參數(shù),以[]string類型
- flag.NArg() //返回命令行參數(shù)后的其他參數(shù)個(gè)數(shù)
- flag.NFlag() //返回使用的命令行參數(shù)個(gè)數(shù)
完整示例
func main() {
var name string
var age uint
var married bool
var d time.Duration
flag.StringVar(&name, "name", "王五", "姓名")
flag.UintVar(&age, "age", 18, "年齡")
flag.BoolVar(&married, "m", false, "婚否")
flag.DurationVar(&d, "duration", 0, "時(shí)間間隔")
flag.Parse()
fmt.Println(name, age, married, d) // lisi 35 true 1h15m36s
fmt.Println(flag.Args()) // [abc true 123]
fmt.Println(flag.NArg()) // 3
fmt.Println(flag.NFlag()) // 4
}
輸入:
go run .\main.go -name lisi --age 35 -m=true --duration=1h15m36s abc true 123
輸出:
lisi 35 true 1h15m36s[abc true 123]34
到此這篇關(guān)于golang中的標(biāo)準(zhǔn)庫(kù)flag的文章就介紹到這了,更多相關(guān)go標(biāo)準(zhǔn)庫(kù)flag內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Gin+Gorm實(shí)現(xiàn)增刪改查的示例代碼
本文介紹了如何使用Gin和Gorm框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的增刪改查(CRUD)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
淺析Golang中如何實(shí)現(xiàn)一個(gè)強(qiáng)大的重試機(jī)制
在 Go 語言中,實(shí)現(xiàn)一個(gè)強(qiáng)大的重試機(jī)制可以通過多種方式來完成,這篇文章為大家介紹了一個(gè)常見的實(shí)現(xiàn)方法,需要的小伙伴可以參考一下2025-03-03
golang 實(shí)現(xiàn)struct、json、map互相轉(zhuǎn)化
這篇文章主要介紹了golang 實(shí)現(xiàn)struct、json、map互相轉(zhuǎn)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang 使用map需要注意的幾個(gè)點(diǎn)
這篇文章主要介紹了Golang 使用map需要注意的幾個(gè)點(diǎn),幫助大家更好的理解和學(xué)習(xí)golang,感興趣的朋友可以了解下2020-09-09
Go標(biāo)準(zhǔn)庫(kù)常見錯(cuò)誤分析和解決辦法
Go語言的標(biāo)準(zhǔn)庫(kù)為開發(fā)者提供了豐富且高效的工具,涵蓋了從網(wǎng)絡(luò)編程到文件操作等各個(gè)方面,然而,標(biāo)準(zhǔn)庫(kù)雖好,使用不當(dāng)卻可能適得其反,正所謂"工欲善其事,必先利其器",本文將深入剖析Go標(biāo)準(zhǔn)庫(kù)使用中的常見錯(cuò)誤,幫助開發(fā)者避開這些坑,寫出更加健壯的代碼2025-04-04
Golang 實(shí)現(xiàn)interface類型轉(zhuǎn)string類型
這篇文章主要介紹了Golang 實(shí)現(xiàn)interface類型轉(zhuǎn)string類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04

