0

我最近安装了 go 并尝试了 hello world 示例。

package main
import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}

$ 去构建 hello.go

返回 1.2Mb 大小的 hello 二进制文件。这对于一个 hello world 程序来说是相当大的。关于为什么文件大小很大的任何特殊原因?是因为导入“fmt”吗?

4

2 回答 2

5

这是一个围棋常见问题

为什么我的小程序是这么大的二进制文件?

gc 工具链中的链接器(5l、6l 和 8l)执行静态链接。因此,所有 Go 二进制文件都包含 Go 运行时,以及支持动态类型检查、反射甚至恐慌时堆栈跟踪所需的运行时类型信息。

在 Linux 上使用 gcc 静态编译和链接的简单 C“hello, world”程序大约 750 kB,包括 printf 的实现。使用 fmt.Printf 的等效 Go 程序大约为 1.2 MB,但其中包括更强大的运行时支持。

于 2013-03-10T19:35:51.010 回答
1

是的,包“fmt”是原因之一。它还反过来导入其他包。但即使不使用“fmt”,整个运行时也会静态链接到 Go 二进制文件中。Go 的运行时并不是一个简单的运行时——它包括例如调度程序/goroutine 与 OS 线程管理器、拆分堆栈分配器、垃圾收集器和垃圾收集器友好的内存分配器(也是 C 线程友好的)、信号处理程序和堆栈跟踪生成器。 ..

于 2013-03-10T18:36:23.847 回答