有以下两种常用的定义命令行 flag 参数的方法:
1) flag.Type()
基本格式如下:
flag.Type(flag 名, 默认值, 帮助信息) *Type
Type 可以是 Int、String、Bool 等,返回值为一个相应类型的指针,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
- name := flag.String("name", "张三", "姓名")
- age := flag.Int("age", 18, "年龄")
- married := flag.Bool("married", false, "婚否")
- delay := flag.Duration("d", 0, "时间间隔")
需要注意的是,此时 name、age、married、delay 均为对应类型的指针。
2) flag.TypeVar()
基本格式如下:
flag.TypeVar(Type 指针, flag 名, 默认值, 帮助信息)
TypeVar 可以是 IntVar、StringVar、BoolVar 等,其功能为将 flag 绑定到一个变量上,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
- var name string
- var age int
- var married bool
- var delay time.Duration
- flag.StringVar(&name, "name", "张三", "姓名")
- flag.IntVar(&age, "age", 18, "年龄")
- flag.BoolVar(&married, "married", false, "婚否")
- flag.DurationVar(&delay, "d", 0, "时间间隔")
flag.Parse()
通过以上两种方法定义好命令行 flag 参数后,需要通过调用 flag.Parse() 来对命令行参数进行解析。
支持的命令行参数格式有以下几种:
- -flag:只支持 bool 类型;
- -flag=x;
- -flag x:只支持非 bool 类型。
其中,布尔类型的参数必须使用等号的方式指定。
flag 包的其他函数:
flag.Args() //返回命令行参数后的其他参数,以 []string 类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参 数个数
结合上面的介绍知识,我们来看一个实例,代码如下:
- package main
- import (
- "flag"
- "fmt"
- )
- var Input_pstrName = flag.String("name", "gerry", "input ur name")
- var Input_piAge = flag.Int("age", 20, "input ur age")
- var Input_flagvar int
- func Init() {
- flag.IntVar(&Input_flagvar, "flagname", 1234, "help message for flagname")
- }
- func main() {
- Init()
- flag.Parse()
- // After parsing, the arguments after the flag are available as the slice flag.Args() or individually as flag.Arg(i). The arguments are indexed from 0 through flag.NArg()-1
- // Args returns the non-flag command-line arguments
- // NArg is the number of arguments remaining after flags have been processed
- fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
- for i := 0; i != flag.NArg(); i++ {
- fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
- }
- fmt.Println("name=", *Input_pstrName)
- fmt.Println("age=", *Input_piAge)
- fmt.Println("flagname=", Input_flagvar)
- } 运行结果如下:
go run main.go -name "aaa" -age=123 -flagname=999
args=[], num=0
name= aaa
age= 123
flagname= 999