Go语言中使用flag包对命令行进行参数解析的方法
flag
flag是Go标准库提供的解析命令行参数的包。
使用方式:
flag.Type(name,defValue,usage)
其中Type为String,Int,Bool等;并返回一个相应类型的指针。
flag.TypeVar(&flagvar,name,defValue,usage)
将flag绑定到一个变量上。
自定义flag
只要实现flag.Value接口即可:
typeValueinterface{ String()string Set(string)error }
通过如下方式定义该flag:
flag.Var(&flagvar,name,usage)
示例
packagemain import"flag" import"fmt" import"strconv" typepercentagefloat32 func(p*percentage)Set(sstring)error{ v,err:=strconv.ParseFloat(s,32) *p=percentage(v) returnerr } func(p*percentage)String()string{returnfmt.Sprintf("%f",*p)} funcmain(){ namePtr:=flag.String("name","lyh","user'sname") agePtr:=flag.Int("age",22,"user'sage") vipPtr:=flag.Bool("vip",true,"isavipuser") varemailstring flag.StringVar(&email,"email","lyhopq@gmail.com","user'semail") varpoppercentage flag.Var(&pop,"pop","popularity") flag.Parse() others:=flag.Args() fmt.Println("name:",*namePtr) fmt.Println("age:",*agePtr) fmt.Println("vip:",*vipPtr) fmt.Println("pop:",pop) fmt.Println("email:",email) fmt.Println("other:",others) }
$./command-line-flags name:lyh age:22 vip:true email:lyhopq@gmail.com other:[]
$./command-line-flags-namegolang-age4-vip=true-pop99简洁高并发等等 name:golang age:4 vip:true pop:99 email:lyhopq@gmail.com other:[简洁高并发等等]
$./command-line-flags-h Usageof./command-line-flags: -age=22:user'sage -email="lyhopq@gmail.com":user'semail -name="lyh":user'sname -pop=0.0:popularity -vip=true:isavipuser