我正在解析命令行参数。我使用以下代码:
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方式”是:二进制之后的第一个位置是为强制参数保留的。之后你可以放置可选的参数和标志。
答案 0 :(得分:8)
flag
包不使用GNU解析规则。解释了规则in the documentation for flag the package。你的问题在那里得到了解答:
标记解析在第一个非标记参数(“ - ”是非标记参数)之前或终结符“ - ”之后停止。