溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

go語言中的flag是什么

發(fā)布時間:2020-06-21 13:00:46 來源:億速云 閱讀:242 作者:元一 欄目:編程語言

在寫命令行程序(工具、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)文章!

向AI問一下細節(jié)

免責(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)容。

AI