功能
作为程序员,经常会使用一些只有命令行,没有图像界面操作的小工具。
这种小工具,我们使用 go
语言,借助内置的 flag
包,可以很方便的可开发。
用法
切记一条原则。下面的内容,都必须要使用 go build -o "packagename""
来生成二进制包来运行,不能直接使用 run main.go
的方式运行。
代码示例如下
var (
name string
age int
)
func init() {
flag.StringVar(&name, "name", "刘德华", "请输入名字")
flag.IntVar(&age, "age", 18, "请输入年龄")
}
func main() {
flag.Parse() //如果想要使用命令行传参,就要掉用这个函数。否则只是赋予默认值
fmt.Println(name)
fmt.Println(age)
}
使用方法
-
一开始先声明
name
,age
变量,然后调用flagflag.StringVar
函数,将默认值存入对应的 变量的指针 -
执行
init
函数,会给变量赋予对应的默认值 -
但是只执行
ini
函数,只能使用赋予变量默认值,如果使用命令行传参,就要调用flag.Parse()
方法,解析命令行传入的参数。 -
命令行参数的格式可以是:
- flag xxx (使用空格,一个 - 符号)
- --flag xxx (使用空格,两个 - 符号)
- -flag=xxx (使用等号,一个 - 符号)
- --flag=xxx (使用等号,两个 - 符号)
flag.Parse() 方法
-
函数flag.Parse用于真正解析命令参数,并把它们的值赋给相应的变量。对该函数的调用必须在所有命令参数存储载体的声明(这里是对变量name的声明)和设置(这里是指flag.StringVar函数的调用)之后,并且在读取任何命令参数值之前进行。正因为如此,我们最好把
flag.Parse()
放在main函数的函数体的第一行 -
解析过程中遇到非选项字段,将立即结束解析,后面的字段会被放入到
args
变量中,flag.Args()
里面存的是数组。 -
以
-
或者--
开头指定选项名,-
和--
是等效的