首頁 >後端開發 >Golang >golang flag是什麼

golang flag是什麼

(*-*)浩
(*-*)浩原創
2019-12-03 10:09:592987瀏覽

golang flag是什麼

在 Golang 程式中有很多種方法來處理命令列參數。簡單的情況下可以不使用任何函式庫,直接處理 os.Args;其實 Golang 的標準函式庫提供了 flag 套件來處理命令列參數;還有第三方提供的處理命令列參數的函式庫,像是 Pflag 等。

flag套件提供了一系列解析指令列參數的功能介面             (建議學習:go

指令行語法

命令列語法主要有以下幾種形式

-flag //只支持bool类型
-flag=x
-flag x //只支持非bool类型

以上語法對於一個或兩個'-'號,效果是一樣的,但是要注意對於第三種情況,只支援非bool類型,原因是碰到如下情況時

cmd -x *

*為0,false有可能表示一個文件名或文件,也有可能表示x標籤的值為0或false,會產生二義性,因此規定第三種只支援非bool型別。對於整形flag,合法的值可以是1234, 0664,0x1234或負數等。對於布林型flag,可以為1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等

命令列參數解析方法

使用flag主要包括以下幾步

定義flag參數,有三種方式

透過flag.String(), Bool (), Int() 等flag.Xxx()方法,該種方式傳回一個對應的指標

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()綁定自訂類型,自訂類型需要實作Value介面(Receives必須為指標),例如

flag.Var(&flagVal, "name", "help message for flagname")

對於這種類型的flag,預設值為該變數類型的初始值

呼叫flag.Parse()解析命令列參數到定義的flag

flag.Parse()

解析函數將會在碰到第一個非flag命令列參數時停止,非flag命令列參數是指不滿足命令列語法的參數,如命令列參數為cmd --flag=true abc則第一個非flag命令列參數為「abc」

#呼叫Parse解析後,就可以直接使用flag本身(指標類型)或綁定的變數了(值型別)

fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)

還可透過flag.Args(), flag.Arg(i)來取得非flag命令列參數

以上是golang flag是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn