在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。各种语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。如果命令行参数纯粹自己写代码来解析,对于比较复杂的,还是挺费劲的。在 go 标准库中提供了一个包:flag,方便进行命令行解析。
使用示例
我们以 docker 为例,当我们输入 docker --help,输出信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Usage: docker [OPTIONS] COMMAND
A self-sufficient runtime for containers
Options: --config string Location of client config files (default "/root/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem")
... ... 下文略去 ... ...
所以说,flag 包实现了命令行参数的解析的一个标准库,当然还有其他标准库也能实现类似的功能,例如:os.Args,但是使用 flag 处理会更加方便。
funcmain() { name := flag.String("name", "default_name", "Help:Please input your name") age := flag.Int("age", 0, "Help:Please input your age") flag.Parse()