编写工具的时候经常会利用到命令行参数解析,发现了一款非常好用的命令行工具解析包 goflags。
查看官方文档了解更多细节。
1 | https://github.com/projectdiscovery/goflags |
获取包。
1 | go get "github.com/projectdiscovery/goflags" |
引入之后可以新建一个 FlagSet
,而且可以设置一个命令描述,可以在使用 -h
的时候展示出来。
1 | flagSet := goflags.NewFlagSet() |
我喜欢设置一个选项的结构体,方便命令行参数的传递。
1 | package types |
goflags 可以对命令行参数进行分组,更加直观的将不同功能的命令分类,这时就可以将选项结构体与命令参数绑定。
1 | flagSet.CreateGroup("input", "Input", |
如果指定的是一个字符串切片,可以指定对应的分隔符来区分每一个字符串。
1 | flagSet.StringSliceVarP(&opt.inputs, "inputs", "i", nil, "list of inputs (file,comma-separated)", goflags.FileCommaSeparatedStringSliceOptions) |
指定完所有的参数后需要解析对应参数。
1 | if err := flagSet.Parse(); err != nil { |
简单案例如下。
1 | package main |