命令行标志是指定命令行程序选项的常用方法。 例如,在wc -l
中,-l
是命令行标志。Go提供了一个支持基本命令行标志解析的标志包。这里将使用这个包来实现示例命令行程序。
所有的示例代码,都放在
F:\worksp\golang
目录下。安装Go编程环境请参考:/tutorial/detail-5562.html
command-line-flags.go
的完整代码如下所示 -
package main // Go provides a `flag` package supporting basic // command-line flag parsing. We'll use this package to // implement our example command-line program. import "flag" import "fmt" func main() { // Basic flag declarations are available for string, // integer, and boolean options. Here we declare a // string flag `word` with a default value `"foo"` // and a short description. This `flag.String` function // returns a string pointer (not a string value); // we'll see how to use this pointer below. wordPtr := flag.String("word", "foo", "a string") // This declares `numb` and `fork` flags, using a // similar approach to the `word` flag. numbPtr := flag.Int("numb", 42, "an int") boolPtr := flag.Bool("fork", false, "a bool") // It's also possible to declare an option that uses an // existing var declared elsewhere in the program. // Note that we need to pass in a pointer to the flag // declaration function. var svar string flag.StringVar(&svar, "svar", "bar", "a string var") // Once all flags are declared, call `flag.Parse()` // to execute the command-line parsing. flag.Parse() // Here we'll just dump out the parsed options and // any trailing positional arguments. Note that we // need to dereference the pointers with e.g. `*wordPtr` // to get the actual option values. fmt.Println("word:", *wordPtr) fmt.Println("numb:", *numbPtr) fmt.Println("fork:", *boolPtr) fmt.Println("svar:", svar) fmt.Println("tail:", flag.Args()) }
执行上面代码,将得到以下输出结果 -
F:\worksp\golang>go build command-line-flags.go F:\worksp\golang>command-line-flags -word=opt -numb=7 -fork -svar=flag word: opt numb: 7 fork: true svar: flag tail: [] F:\worksp\golang>command-line-flags -word=opt word: opt numb: 42 fork: false svar: bar tail: [] F:\worksp\golang>command-line-flags -word=opt a1 a2 a3 word: opt numb: 42 fork: false svar: bar tail: [a1 a2 a3] F:\worksp\golang>command-line-flags -word=opt a1 a2 a3 -numb=7 word: opt numb: 42 fork: false svar: bar tail: [a1 a2 a3 -numb=7] F:\worksp\golang>command-line-flags -h Usage of 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") F:\worksp\golang>command-line-flags -wat flag provided but not defined: -wat Usage of 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")