Tenha em mente que o comando build está invocando várias partes da cadeia de ferramentas go com o objetivo implícito de produzir um executável . Você poderia pedir para ir apenas compilar, dizer ou ligar, pegando cada ferramenta por vez, e seria apenas o último passo na cadeia de ferramentas de construção que realmente define o bit executável.
Isso não é especificamente algo interessante. É o que fazem as cadeias de ferramentas do compilador. Você deve ter em mente que um shell script não é um executável compilado: é por isso que você precisa definir o bit executável para que quando o kernel ler a primeira linha ele saiba que invocar o shell e passar o corpo do script para ele.