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.