我可以不使用 chmod 来运行编译好的 .go 文件

我可以不使用 chmod 来运行编译好的 .go 文件

我正在学习用谷歌的 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 并将脚本主体传递给它。

相关内容