在命令行上的参数后解析Golang标志

时间:2014-08-11 16:59:01

标签: command-line go

我正在解析命令行参数。我使用以下代码:

var flagB = flag.Bool("b", false, "boolflag")

func main() {
    flag.Parse()

    fmt.Println(flag.NArg())
    fmt.Println("-b", *flagB)
}

当我像这样执行二进制文件时:

> test -b "random"

我得到了预期的输出,因为有一个参数,并设置了标志:

1
-b true

然而,当我以相反的方式执行二进制文件时:

> test "random" -b

我明白了:

2
-b false

现在,该标志不再被重新标记为flag,而是另一个参数。

为什么会那样?是否有一个定义,首先是标志,然后是参数?我一直认为传递和解析参数的“GNU方式”是:二进制之后的第一个位置是为强制参数保留的。之后你可以放置可选的参数和标志。

1 个答案:

答案 0 :(得分:8)

flag包不使用GNU解析规则。解释了规则in the documentation for flag the package。你的问题在那里得到了解答:

  

标记解析在第一个非标记参数(“ - ”是非标记参数)之前或终结符“ - ”之后停止。