title: What's the difference between `//go:build` and `// +build` directives?
body: <p>for example, <a href="https://github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5" rel="noreferrer">https://github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5</a> :</p>
  <pre class="lang-golang prettyprint-override"><code>//go:build (386 || amd64 || amd64p32) &amp;&amp; gccgo
  // +build 386 amd64 amd64p32
  // +build gccgo
  
  package cpu
  </code></pre>
  <p>In my eyes, as a build tag, <code>// +build ... </code> can work well.<br />
  Why is <code>//go:build</code> still explicitly specified?</p>
  <p>Btw, it is hard to find the mannual of <code>//go:build</code>, but <code>// +build</code> is easy(<a href="https://pkg.go.dev/cmd/go#hdr-Build_constraints" rel="noreferrer">https://pkg.go.dev/cmd/go#hdr-Build_constraints</a>)</p>