前言
其實這種文章挺多的,不過大部分都是英文跟簡體,有些也描述太過繁雜,Zam 想要寫一個簡單的範例幫助大家,用最短的時間知道必用的幾個用法。另外 flag 雖然可以在讀取 argument 直接透過 struct 初始自己的物件,但是這屬於比較高階用法,一般人不會用到這邊就不做解釋。
使用率最高,必知用法
func PrintDefaults
可以印出已經設定好的指令。如果你想要更多關於你撰寫的 cmd 提示,不只有設定的指令,通常會與 Usage 做搭配。詳細可以透過以下範例達成
flag.Usage = usage
func usage() {
fmt.Fprintf(os.Stderr, "Usage: math [options] [root]\n")
fmt.Fprintf(os.Stderr, " Currently, there are four URI routes could be used:\n")
flag.PrintDefaults()
}
func Parse
會把 command line 的 argument 變成你所 define 的變數,對於不同形式的 bind 會再以下做解釋。
func Arg
可以拿取未指定的 value,例如 3, 4
math -o "*" -p=true 3 4flag.Arg(0) // get 3
flag.Arg(1) // get 4
func Args
可以一次拿取所有的 Arg(),根據情境可以決定使用 Arg(int) 或 Args()
math -o "*" -p=true 3 4len(flag.Args()) // get 2
flag.Args()[0] // get 3
func StringVar
基本上每個 primary type 都有這兩種 func,例如 int, bool 等等。這兩個其實沒有太大的差異,都可以達到一樣的目的,只是儲存方式不同,所以呼叫上有點不同。
StringVar 透過 bind 將 argument 綁在一起
var operator string
flag.StringVar(&operator, “o”, “+”, “the math `operator`”)
fmt.Printfln(operator) // +
func String
String 透過 pointer 將 argument 綁在一起
var operator *string
operator = flag.String("o", "+", "the math `operator`")
fmt.Printfln(operator) // 0xc00001a0b8
fmt.Printfln(*operator) // +
範例程式碼
使用範例
math -o “*” -p=true 3 4或者math -o=“*” -p=true 3 4// 結果
3 * 4 = 12
輸入 -help or -h 看使用說明
math -hUsage: math [options] [root]
Currently, there are four URI routes could be used:
-o operator
the math operator (default "+")
-p show
show process
References
如果此篇你喜歡或覺得有幫助
可以幫 Zam 快速連點個鼓掌(claps) 或者 follow 哦
萬分感謝!