这是一个简化的代码片段:真实项目中的上下文是我有一个命令行应用程序,它解析输入到程序的参数,然后在命令名称被拔出后解析剩余args的各个命令。我正在使用每个命令的FlagSet,但由于某种原因,它实际上不会解析标志:
package main
import (
"fmt"
"flag"
)
func main() {
args := []string{"arg", "-flag", "value"}
flags := flag.NewFlagSet("flags", flag.ExitOnError)
flagValue := flags.String("flag", "defaultValue", "")
flags.Parse(args)
fmt.Println(flags.Args(), *flagValue)
}
我希望输出为:[arg]值,但我得到:[arg -flag value] defaultValue
代码:http://play.golang.org/p/D4RKPpVODF
我在这里做错了什么?
答案 0 :(得分:4)
args
数组中的参数顺序错误。非标志参数必须在标志参数之后。所以你应该写:
args := []string{"-flag", "value", "arg"}
然后输出就是你所期望的:
[arg] value