命令行标志是用于指定命令行程序选项的常见方式。例如,在 wc -l
中,-l
就是一个命令行标志。
package main
// Go 提供了 flag 包,支持基本的命令行标志解析。我们将使用这个包来实现我们的示例命令行程序。
import (
"flag"
"fmt"
)
func main() {
// 基本的标志声明适用于字符串、整数和布尔选项。在这里,我们声明了一个字符串标志 word,其默认值为 "foo",并附带简短的描述。flag.String 函数返回一个字符串指针(而不是字符串值);我们将在下面看到如何使用这个指针。
wordPtr := flag.String("word", "foo", "a string")
// 这里使用与 word 标志类似的方法声明了 numb 和 fork 标志。
numbPtr := flag.Int("numb", 42, "an int")
forkPtr := 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:", *forkPtr)
fmt.Println("svar:", svar)
fmt.Println("tail:", flag.Args())
}
运行结果:
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -word=opt -numb=7 -fork -svar=flag
word: opt
numb: 7
fork: true
svar: flag
tail: []
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -word=opt
word: opt
numb: 42
fork: false
svar: bar
tail: []
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -word=opt a1 a2 a3
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3]
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -word=opt a1 a2 a3 -numb=7
word: opt
numb: 42
fork: false
svar: bar
tail: [a1 a2 a3 -numb=7]
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -h
Usage of /var/folders/rz/5ypggxrj4tn_2wxyt7qdl0vc0000gn/T/go-build3913877002/b001/exe/command-line-flags:
-fork
a bool
-numb int
an int (default 42)
-svar string
a string var (default "bar")
-word string
a string (default "foo")
i/go-example/command-line-flags via 🐹 v1.22.1
➜ go run command-line-flags.go -wat
flag provided but not defined: -wat
Usage of /var/folders/rz/5ypggxrj4tn_2wxyt7qdl0vc0000gn/T/go-build2879297987/b001/exe/command-line-flags:
-fork
a bool
-numb int
an int (default 42)
-svar string
a string var (default "bar")
-word string
a string (default "foo")
exit status 2
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。