2017-08-03 169 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