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