概念簡介
命令行標識
是命令行程序指定選項的常用方式。例如,在 `wc -l` 中,
這個 `-l` 就是一個命令行標識。
例程代碼
package main
// Go 提供了一個 `flag` 包,支持基本的命令行標誌解析。
// 我們將用這個包來實現我們的命令行程序示例。
import "flag"
import "fmt"
func main() {
// 基本的標記聲明僅支持字符串、整數和布爾值選項。
// 這裏我們聲明一個默認值為 `"foo"` 的字符串標誌 `word`
// 並帶有一個簡短的描述。這裏的 `flag.String` 函數返回一個字
// 符串指針(不是一個字符串值),在下麵我們會看到是如何
// 使用這個指針的。
wordPtr := flag.String("word", "foo", "a string")
// 使用和聲明 `word` 標誌相同的方法來聲明 `numb` 和 `fork` 標誌。
numbPtr := flag.Int("numb", 42, "an int")
boolPtr := flag.Bool("fork", false, "a bool")
// 用程序中已有的參數來聲明一個標誌也是可以的。注
// 意在標誌聲明函數中需要使用該參數的指針。
var svar string
flag.StringVar(&svar, "svar", "bar", "a string var")
// 所有標誌都聲明完成以後,調用 `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
word: opt
numb: 7
fork: true
svar: flag
tail: []
# 注意到,如果你省略一個標誌,那麽這個標誌的值自動的設
# 定為他的默認值。
$ ./command-line-flags -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []
# 尾隨的位置參數可以出現在任何標誌後麵。
$ ./command-line-flags -word=opt a1 a2 a3
word: opt
...
tail: [a1 a2 a3]
# 注意,`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]
# 使用 `-h` 或者 `--help` 標誌來得到自動生成的這個命
# 令行程序的幫助文本。
$ ./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
# 如果你提供一個沒有使用 `flag` 包指定的標誌,程序會輸出一
# 個錯誤信息,並再次顯示幫助文本。
$ ./command-line-flags -wat
flag provided but not defined: -wat
Usage of ./command-line-flags:
...
# 後麵,我們將會看一下環境變量,另一個用於參數化程序的基本方式。
課程導航
學習上一篇:Go語言教程:命令行參數 學習下一篇:Go語言教程:環境變量
相關資料
本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/command-line-flags