使用flag包可以用来解析命令行参数,flag.TypeVar()用于定义参数并绑定到指定变量,flag.Type()用于定义参数并绑定到返回的指针,定义时可以指定参数名称,默认值,使用说明。定义完参数后调用flag.Parse()进行解析,flag.PrintDefaults()用于打印所有已定义参数的默认值和使用说明。
命令行参数的语法有如下三种形式,其中前面的减号可以是两个,整数类型可以是十进制,十六进制,八进制,负数,bool类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。如果bool类型的参数在命令行中使用了-flag xxx这种形式,其后的参数都会被当做non-flag参数。
-flag //只支持bool类型,例如-help
-flag=xxx //支持任何类型,例如-help=true -port=4567 -host=127.0.0.1
-flag xxx //只支持非bool类型,例如-port 4567 -host 127.0.0.1
另外,我们还可以创建自定义类型参数,只要实现flag.Value接口即可。如果项目需要更高级的命令行解析方式可以使用第三方库。
package main
import (
"flag"
"fmt"
)
var(
isShowHelp bool
port uint
)
func main(){
flag.BoolVar(&isShowHelp,"h",false,"help")
flag.UintVar(&port,"port",8888,"the port for connection")
host:=flag.String("host","127.0.0.1","the host")
flag.Parse()
if (isShowHelp){
flag.PrintDefaults()
}
fmt.Printf("host:%s,port:%d",*host,port)
}
有疑问加站长微信联系(非本文作者)