猿问

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

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


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

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


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


慕侠2389804
浏览 200回答 1
1回答

红颜莎娜

该flag软件包不使用 GNU 解析规则。这些规则在 flag the package 的文档中进行了解释。你的问题在那里得到了回答:标志解析在第一个非标志参数(“-”是非标志参数)之前或终止符“--”之后停止。
随时随地看视频慕课网APP

相关分类

Go
我要回答