$ ./go-cli-flags -h
Usage of ./go-cli-flags:
-fork=false: a bool
-numb=42: an int
-svar="bar": a string var
-word="foo": a string
如果在执行程序时提供了程序未指定的flag,程序会报告错误信息并展示帮助文本。
$ ./go-cli-flags -wat
flag provided but not defined: -wat
Usage of ./go-cli-flags:
-fork=false: a bool
-numb=42: an int
-svar="bar": a string var
-word="foo": a string
Go
语言提供的flag
库支持基础的命令行flag的解析。什么是命令行flag? 举个例子来说,常用的Linux命令wc -l
这个-l
就是wc
命令支持的一个命令行flag。下面是用
Go
语言的flag
包编写的一个命令行Demo程序:使用
flag
包可以为程序声明字符串型、数字型、布尔型的命令行flag。flag.String("word", "Jude", "a string")
声明了一个字符串型的flagword
,指定了它的默认值和简介。flag.String
函数返回一个字符串型的指针(不是字符串值)。numb
和fork
这两个flag的函数flag.Int
和flag.Bool
,使用方法跟flag.String
函数的一样。flag.StringVar(&svar, "svar", "bar", "a string var")
这个形式的函数可以把命令行flag参数值解析到程序中的已存变量,需要注意的是函数接受的是已存变量的指针。flag.Parse()
函数去执行命令行解析。wordPtr
这几个存储了指针的变量进行解引用(*wordPtr
)才能拿到具体的命令行flag值。要使用制作的命令行程序,先把程序编译成二进制命令文件:
执行命令时为每个flag指定值:
执行命令时被忽略的flag会自动使用定义flag时指定的默认值。
执行命令时,在flag后可以传递任意多个位置实参
注意,flag包要求执行命令时所有命令行flag参数都要出现在位置实参的前面,否则命令行flag参数将会被理解成位置实参,比如下面这样
使用
-h
或者--help
可以获取自动为命令行程序生成的帮助文本如果在执行程序时提供了程序未指定的flag,程序会报告错误信息并展示帮助文本。
更多用flag库编写CLI程序的例子:https://www.digitalocean.com/community/tutorials/how-to-use-the-flag-package-in-go