0
0

Go flag/kingpin 命令行解析多个同名参数

smallfish 发表于 2015年01月17日 08:00 | Hits: 3032

想了半天标题应该怎么写,都不太好表达,要的效果如下:

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.

原文链接: http://chenxiaoyu.org/2015/01/17/go-flag-multiple-values.html

0     0

我要给这篇文章打分:

可以不填写评论, 而只是打分. 如果发表评论, 你可以给的分值是-5到+5, 否则, 你只能评-1, +1两种分数. 你的评论可能需要审核.

评价列表(0)