title: Golang flag parsing after an argument on command line
body: <p>I am parsing command-line arguments. I use the following code:</p>
  
  <pre><code>var flagB = flag.Bool("b", false, "boolflag")
  
  func main() {
      flag.Parse()
  
      fmt.Println(flag.NArg())
      fmt.Println("-b", *flagB)
  }
  </code></pre>
  
  <p>When I execute the binary like this:</p>
  
  <pre><code>&gt; test -b "random"
  </code></pre>
  
  <p>I get the expected output, becuase there is one argument, and the flag is set:</p>
  
  <pre><code>1
  -b true
  </code></pre>
  
  <p>However, when I execute the binary the other way around:</p>
  
  <pre><code>&gt; test "random" -b
  </code></pre>
  
  <p>I get this:</p>
  
  <pre><code>2
  -b false
  </code></pre>
  
  <p>Now, the flag isn't recodnized any more as flag, but as another argument.</p>
  
  <p>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.</p>