清華尹成帶你實戰GO案例(45)Go 命令列引數標記
Go 命令列引數標記
命令列引數標記是為命令列程式指定選項引數的常用方法。例如,在命令 wc -l 中, -l 就是一個命令列參
數標記。
Go提供了 flag 包來支援基本的命令列標記解析。我們這裡將要使用這個包提供的方法來實現帶選項的命
令行程式。
為了執行示例,你需要先將程式編譯為可執行檔案。
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
命令列引數標記是為命令列程式指定選項引數的常用方法。例如,在命令 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
相關文章
- 清華尹成帶你實戰GO案例(44)Go 命令列引數Go命令列
- 清華尹成帶你實戰GO案例(63)Go 指標Go指標
- 清華尹成帶你實戰GO案例(54)Go 陣列Go陣列
- 清華尹成帶你實戰GO案例(19)Go變數Go變數
- 清華尹成帶你實戰GO案例(52)Go數值Go
- 清華尹成帶你實戰GO案例(53)Go 數字解析Go
- 清華尹成帶你實戰GO案例(55)Go 隨機數Go隨機
- 清華尹成帶你實戰GO案例(43)Go 可變長引數列表Go
- 清華尹成帶你實戰GO案例(22)Go常量Go
- 清華尹成帶你實戰GO案例(28)Go 方法Go
- 清華尹成帶你實戰GO案例(35)Go 互斥Go
- 清華尹成帶你實戰GO案例(38)Go 介面Go
- 清華尹成帶你實戰GO案例(46)Go 排序Go排序
- 清華尹成帶你實戰GO案例(47)Go 切片Go
- 清華尹成帶你實戰GO案例(2) Go 字典Go
- 清華尹成帶你實戰GO案例(7)Go DeferGo
- 清華尹成帶你實戰GO案例(7)Go ExitGo
- 清華尹成帶你實戰GO案例(12)Go PanicGo
- 清華尹成帶你實戰GO案例(36)Go 環境變數Go變數
- 清華尹成帶你實戰GO案例(62)Go 原子計數器Go
- 清華尹成帶你實戰GO案例(23)Go 超時Go
- 清華尹成帶你實戰GO案例(29)Go 工作池Go
- 清華尹成帶你實戰GO案例(37)Go 集合功能Go
- 清華尹成帶你實戰GO案例(49)Go 時間Go
- 清華尹成帶你實戰GO案例(57)Go通道方向Go
- 清華尹成帶你實戰GO案例(8)Go for迴圈Go
- 清華尹成帶你實戰GO案例(17) Go URL解析Go
- 清華尹成帶你實戰GO案例(20)Go 遍歷通道Go
- 清華尹成帶你實戰GO案例(25)Go 打點器Go
- 清華尹成帶你實戰GO案例(30)Go 關閉通道Go
- 清華尹成帶你實戰GO案例(39)Go 結構體Go結構體
- 清華尹成帶你實戰GO案例(40)Go 程式觸發Go
- 清華尹成帶你實戰GO案例(41)Go 程式執行Go
- 清華尹成帶你實戰GO案例(50)Go 時間戳Go時間戳
- 清華尹成帶你實戰GO案例(58)Go通道緩衝Go
- 清華尹成帶你實戰GO案例(5)Go 自定義排序Go排序
- 清華尹成帶你實戰GO案例(10)Go JSON支援GoJSON
- 清華尹成帶你實戰GO案例(11)Go Line FiltersGoFilter