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.
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 "--".
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With