一般使用
在写命令行程序(工具、server)时,对命令参数进行解析是常见的需求。Go的命令行参数解析通过flag包实现,先看下面这个例子,假设我们实现了一个server,启动这个server的时候需要指定监听的tcp地址(例如:127.0.0.1:1314)、配置文件、监听的http地址(例如:127.0.0.1:6666)。启动命令如下:
./server -tcpAddr 127.0.0.1:1314 -config “/usr/local/etc/xxx.conf” -httpAddr 127.0.0.1:6666
那我们的实现如下:
package main
import (
"fmt"
"flag"
)
var (
tcpAddr = flag.String("tcpAddr", "0.0.0.0:1314", "监听的TCP地址")
httpAddr = flag.String("httpAddr", "0.0.0.0:6666", "监听的http地址")
configFile = flag.String("config", "", "配置文件地址")
)
func main(){
flag.Parse()
fmt.Printf("tcpAddr:%s\n", *tcpAddr)
fmt.Printf("httpAddr:%s\n", *httpAddr)
fmt.Printf("configFile:%s\n", *configFile)
}
不带参数的执行结果:
winterdeMacBook-Pro:interface winter$ ./flagtest
tcpAddr:0.0.0.0:1314
httpAddr:0.0.0.0:6666
configFile:
带参数的执行结果:
winterdeMacBook-Pro:interface winter$ ./flagtest -tcpAddr 127.0.0.1:1314 -httpAddr 127.0.0.1:6666 -config /usr/local/etc/xxx.conf
tcpAddr:127.0.0.1:1314
httpAddr:127.0.0.1:6666
configFile:/usr/local/etc/xxx.conf
常用函数
Usage
用于输出所有定义了的命令行参数及其帮组信息。例如上述代码中flag.Parse()后调用flag.Usage()输出:
-config string
配置文件地址
-httpAddr string
监听的http地址 (default "0.0.0.0:6666")
-tcpAddr string
监听的TCP地址 (default "0.0.0.0:1314")
flag.Xxx
其中Xxx可以是Int、String等;返回一个相应类型的指针,如:
httpAddr = flag.String("httpAddr", "0.0.0.0:6666", "监听的http地址")
flag.Xxxvar
将flag绑定到一个变量上
var httpAddr string
flag.String(&httpAddr, "httpAddr", "0.0.0.0:6666", "监听的http地址")
命令行使用方法
命令行flag的语法有如下三种形式:
- -flag // 只支持bool类型
- -flag=x
- -flag x // 只支持非bool类型
所以都使用-flag=x就行了