清華尹成帶你實戰GO案例(45)Go 命令列引數標記

尹成發表於2018-05-22
Go 命令列引數標記
命令列引數標記是為命令列程式指定選項引數的常用方法。例如,在命令 wc -l 中, -l 就是一個命令列參
數標記。
Go提供了 flag 包來支援基本的命令列標記解析。我們這裡將要使用這個包提供的方法來實現帶選項的命
令行程式。

package main
import "flag"
import "fmt"
func main() {
// 基礎的標記宣告適用於string,integer和bool型選項。
// 這裡我們定義了一個標記`word`,預設值為`foo`和一
// 個簡短的描述。`flag.String`函式返回一個字串指
// 針(而不是一個字串值),我們下面將演示如何使
// 用這個指標
wordPtr := flag.String("word", "foo", "a string")
// 這裡定義了兩個標記,一個`numb`,另一個是`fork`,
// 使用和上面定義`word`標記相似的方法
numbPtr := flag.Int("numb", 42, "an int")
boolPtr := flag.Bool("fork", false, "a bool")
// 你也可以程式中任意地方定義的變數來定義選項,只
// 需要把該變數的地址傳遞給flag宣告函式即可
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
// 當所有的flag宣告完成後,使用`flag.Parse()`來分
// 解命令列選項
flag.Parse()
// 這裡我們僅僅輸出解析後的選項和任何緊跟著的位置
// 引數,注意我們需要使用`*wordPtr`的方式來獲取最
// 後的選項值
fmt.Println("word:", *wordPtr)
fmt.Println("numb:", *numbPtr)
fmt.Println("fork:", *boolPtr)
fmt.Println("svar:", svar)
fmt.Println("tail:", flag.Args())
}


為了執行示例,你需要先將程式編譯為可執行檔案。
go build command-line-flags.go
下面分別看看給予該命令列程式不同選項引數的例子:
(1) 給所有的選項設定一個引數
$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []
(2) 如果你不設定flag,那麼它們自動採用預設的值
$ ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []
(3) 尾部的位置引數可以出現在任意一個flag後面
$ ./command-line-flags -word=opt a1 a2 a3
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3]
(4) 注意flag包要求所有的flag都必須出現在尾部位置引數的前面,否則這些flag將被當作位置引數處理
$ ./command-line-flags -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
trailing: [a1 a2 a3 -numb=7]
(5) 使用 -h 或者 --help 這兩個flag來自動地生成命令列程式的幫助資訊
$ ./command-line-flags -h
Usage of ./command-line-flags:
-fork=false: a bool
-numb=42: an int
-svar="bar": a string var
-word="foo": a string
(6) 如果你提供了一個程式不支援的flag,那麼程式會列印一個錯誤資訊和幫助資訊
$ ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./go_cmd_flag:
-fork=false: a bool
-numb=42: an int
-svar="bar": a string var

-word="foo": a string





網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN



網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN

相關文章