douji6461 2014-08-11 16:59
浏览 61
已采纳

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

I am parsing command-line arguments. I use the following code:

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

func main() {
    flag.Parse()

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

When I execute the binary like this:

> test -b "random"

I get the expected output, becuase there is one argument, and the flag is set:

1
-b true

However, when I execute the binary the other way around:

> test "random" -b

I get this:

2
-b false

Now, the flag isn't recodnized any more as flag, but as another argument.

Why is it that way? Is there a definition that flags come first and then the arguments? I always thought that the "GNU-way" of passing and parsing arguments is: The first places after the binary are reserved for mandatory arguments. And after that you can put optional arguments and flags.

  • 写回答

1条回答 默认 最新

  • dptj13337 2014-08-11 18:07
    关注

    The flag package does not use GNU parsing rules. The rules are explained in the documentation for flag the package. Your question is answered there:

    Flag parsing stops just before the first non-flag argument ("-" is a non-flag argument) or after the terminator "--".

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对象代号: , 表单: 不存在!
  • ¥15 WebSocket的问题
  • ¥15 WebSocket的问题
  • ¥15 centos上启动kylin后网页报错404
  • ¥20 使用hackrf进行信号收发时接收到的信号幅度太小
  • ¥15 WebSocket的问题
  • ¥15 BDSBAS-B1C和B1C信号有什么不同
  • ¥15 在半圆平面内随机生成点坐标
  • ¥15 系统容量变化的几种多址方式TDMA, CDMA,FDMA,OFDMA 对比,应该给的是一个曲线 图,随着系统容量的增加,几种多址方式性能的对比 图,MATLAB程序仿真折线图
  • ¥15 用visual Studio 写c ++只运行上一个旧代码的运行结果是怎么回事