2017-08-03 168 views
0

我是Golang的新手,我一直无法使用标志找到解决此问题的解决方案。Golang flag:忽略丢失的标志并解析多个重复的标志

如何使用标志,以便我的程序能处理这样的,其中-term标志可能存在的次变量数,包括0次来电:

./myprogram -f flag1 
./myprogram -f flag1 -term t1 -term t2 -term t3 
+0

绑定-term的标志,以你自己的类型实现的变量HTTPS ://golang.org/pkg/flag/#Value并收集每个Set()调用的值。 – Volker

+0

谁能够低估解释我的问题是什么问题? – matt

回答

2

您需要声明自己的类型它实现了Value接口。这是一个例子。

// Created so that multiple inputs can be accecpted 
type arrayFlags []string 

func (i *arrayFlags) String() string { 
    // change this, this is just can example to satisfy the interface 
    return "my string representation" 
} 

func (i *arrayFlags) Set(value string) error { 
    *i = append(*i, strings.TrimSpace(value)) 
    return nil 
} 

然后在主函数你在哪里解析

var myFlags arrayFlags 

flag.Var(&myFlags, "term", "my terms") 
flag.Parse() 

现在所有的条款都包含在片myFlags

+0

这个解释是否正确?: – matt

+0

如果你的意思是,上述工作和编译,那么是的。这就是 – reticentroot

+0

以上的答案谢谢,你能告诉我这个解释是否正确吗?: 因为myFlags被称为Var的值参数,所以myFlags变成类型Value,并且String()和Set()方法自动运行。没有抱歉,我不小心发布了评论,然后因为5分钟过去而被锁定编辑。 – matt