我正在学习用谷歌的 Go 语言编程,我有一个脚本:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
因此我使用以下命令对其进行了编译:
go build /home/user/HelloWorld.go
我注意到我无需执行就可以运行编译的结果:
chmod +x /home/user/HelloWorld
为什么是这样?
答案1
请记住,build 命令会调用 go 工具链的几个部分,其隐含目的是生成一个可执行文件。您可以要求 go 仅编译、链接,依次使用每个工具,并且它只是构建工具链中实际设置可执行位的最后一步。
这不是 go 特有的东西。这是编译器工具链所做的。您应该记住,shell 脚本不是编译后的可执行文件:这就是为什么您需要设置可执行位,以便当内核读取第一行时,它知道调用 shell 并将脚本主体传递给它。