为什么FlagSet没有正确解析这些args?

时间:2014-08-11 16:27:44

标签: go

这是一个简化的代码片段:真实项目中的上下文是我有一个命令行应用程序,它解析输入到程序的参数,然后在命令名称被拔出后解析剩余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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

args数组中的参数顺序错误。非标志参数必须在标志参数之后。所以你应该写:

args := []string{"-flag", "value", "arg"}

然后输出就是你所期望的:

[arg] value

代码:http://play.golang.org/p/cv972SLZfG