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
相信你看完就知道怎么用了。
这是一个从 https://studygolang.com/topics/10181 下的原始话题分离的讨论话题