想了半天标题应该怎么写,都不太好表达,要的效果如下:
xx --name=aa --name=bb
需要解析出name参数,默认flag解析后返回的是最后一个值,即:bb
放出Google大法,搜出一篇早期文字:Issue 842041: Flags: add user-defined flag types
代码示例已经久远,直接拷贝代码运行会报错,原因是Set()应该返回error类型,而不是bool啦。
需要注意的是,如果想实现解析数组,需要:
- 定义类型type xx
- 类型xx实现String()和Set()函数
示例输出:
$ ./xx --name=xx -name=yy v = [xx yy]
上面的示例是基于 Go 语言自带的flag模块,这个稍繁琐了点,我自己用了另外一个模块:alecthomas/kingpin
作者在源码values.go#L203里也有类似的封装,但是只有一个:Strings(注意末尾多了一个s)
同样也是实现了上述函数,另外还有一个:IsCumulative()
话不多说,还是上个示例:
package main import ( "fmt" "gopkg.in/alecthomas/kingpin.v1" ) var ( names = kingpin.Flag("name", "").Strings() ) func main() { kingpin.Parse() fmt.Println(*names) }
效果同上。
END
Go flag/kingpin 命令行解析多个同名参数was originally published by smallfish atsmallfish blogon January 17, 2015.
由 udpwork.com 聚合
|
评论: 0
|
要! 要! 即刻! Now!