【09】Go 标准库 flag 模块应用

murphyzhao · · 270773 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

# Go 标准库 flag 模块应用 参考[Go语言标准库》一书的对应章节:flag – 命令行参数解析](https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter13/13.1.html?q=)。 作为普通玩家不需要过多的了解 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 ``` 相信你看完就知道怎么用了。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

270773 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2024-11-14 09:32:51
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传