go Flag应用
仿nginx命令行 go语言些命令行程序是不错的选择,所以它可以轻松达到如上图类似nginx命令行的效果 例子 package main import ( "flag" "fmt" "os" ) // var ( h bool v,V bool t,T bool q *bool s string p string c string g string n int64 ) func init(){ flag.BoolVar(&h,"h",false,"this help") flag.BoolVar(&v,"v",false,"show version and exit") flag.BoolVar(&V,"V",false,"show version and configure options then exit") flag.BoolVar(&t,"t",false,"test configuration and exit") flag.BoolVar(&T,"T",false,"test configuration,dump it and exit") //另一中绑定方式 q = flag.Bool("q",false,"suppress non-error messages during configuration testing") //注意’signal‘,默认是 -S string 有了`signal`之后,变为-s signal flag.StringVar(&s,"s","","send `signal` to a master") flag.StringVar(&p,"p","/usr/local/nginx","set configuration `file`") flag.StringVar(&c,"c","conf/nginx.conf","set confiruration `file`") flag.StringVar(&g,"g","conf/nginx.conf","set global `directives` out of configuraton file") flag.Int64Var(&n,"n",0,"set `number`") //改变默认的usage flag.Usage=Usage } func main() { flag.Parse() if h { flag.Usage() } if len(s)!=0{ fmt.Println(s) } if n !=0{ fmt.Println(n) } } func Usage() { fmt.Fprintf(os.Stderr,`nginx version: nginx/1.10.0 Usage:nginx [-hvVtTq] [-n number] [-s signal] [-c filename] [-p prefix] [-g directives] Options: `) flag.PrintDefaults() } 先执行go build或go install 编译代码 执行FlagPrac -h 命令就可以输出帮助信息了 执行FlagPrac -s wang 执行FlagPrac -s wang Flag 概述 参考:标准库—命令行参数解析FLAG 两种定义Flag方式 Flag.Xxx() 其中Xxx可以是Int,String等;返回一个相应类型的指针,如: q = flag.Bool("q",false,"suppress non-error messages during configuration testing") Flag.XxxVar() 将flag绑定到一个变量上,如: flag.BoolVar(&h,"h",false,"this help") 另外还可以创建自定义flag,只要实现flag.Value接口即可 Flag解析 在所有的flag定义完成之后,可以通过调用flag.Prarse()进行解析,命令行flag的语法有如下三种方式: flag //只支持bool类型 flag=x flag x //只支持非bool类型 int类型可以是十进制、十六进制、八进制甚至是负数;bool类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration可以接受任何time.ParseDuration能解析的类型 类型和函数 ErrHelp:该错误类型用于当命令行指定了-help参数但没有定义时。 Usage:这是一个函数,用于输出所有定义了的命令行参数和帮助信息(usage message)。一般,当命令行参数解析出错时,该函数会被调用。我们可以指定自己的Usage函数,即:flag.Usage = func(){}