Go 标准库 flag 模块应用
参考Go语言标准库》一书的对应章节:flag – 命令行参数解析。
作为普通玩家不需要过多的了解 flag 背后是如何实现的,可以直接拿来用。
使用流程
定义一个命令行参数
flag.Xxx():Xxx可以是Int、String等;返回一个相应类型的指针
var ip = flag.Int("flagname", 1234, "help message for flagname")
flag.XxxVar():将flag绑定到一个变量上
var flagvar int flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
解析参数
flag.Parse() // 通常会放到 func init() 函数体中,先于 main 函数执行
程序中使用参数
flag.Xxx()
方式的定义,返回值是一个指针,需要使用*
获取指针指向的值(如上的 *ip);flag.XxxVar()
方式的定义,绑定了一个变量,直接引用该变量即可。命令行参数格式
命令行中需要在我们定义的命令行参数前加入
-
来指定参数。命令行参数指定支持下面 3 种方式:-flag
// 只支持bool类型-flag=value
-flag value
// 只支持非bool类型示例:
$ nginx -h
示例程序
package main
import (
"flag"
"fmt"
"os"
)
var (
arg_help bool
arg_host string
arg_port int
)
func init() {
flag.BoolVar(&arg_help, "h", false, "this help")
flag.StringVar(&arg_host, "H", "127.0.0.1", "Appoint the host of remote tcp server")
// 另一种绑定方式
var _port = flag.Int("P", "8080", "Appoint the port of remote tcp server")
flag.Parse()
arg_port = *_port
fmt.Printf("Input port arg: %d\n", arg_port)
}
func main() {
if arg_help {
fmt.Println("This is a tcp client demo, command line is as tcp_client [-H 127.0.0.1] [-P 8080]")
}
fmt.Println("Host:", arg_host, "Port:", arg_port)
}
将上面的代码保存为 tcp_client.go,然后使用命令 go run tcp_client.go -H 192.168.1.100 -P 8081
运行,如下所示:
ubuntu@VM-16-11-ubuntu:~/work/GoNote/TrainingCode/flag$ go run tcp_client.go -H 192.168.1.100 -P 8081
Input port arg: 8081
Host: 192.168.1.100 Port: 8081
相信你看完就知道怎么用了。
有疑问加站长微信联系(非本文作者)

XJD Mark.