在 Go 中编译一个简单的“Hello World”程序时,您可能会惊讶地发现它的可执行文件比预期大得多。这个问题已在 Go FAQ 中得到解决:“为什么我的小程序是这么大的二进制文件?”
解释在于 Go 的链接过程。 Go 使用静态链接,这意味着 Go 运行时以及动态类型检查、反射和恐慌处理所需的所有类型信息都包含在最终的可执行文件中。这种方法提供了强大的运行时支持,但它是以文件大小为代价的。
与 Go 到 C 相比,静态链接的“Hello World”C 程序通常约为 750 kB,包括 printf 实现。相比之下,使用 fmt.Printf 的 Go 等效项由于其广泛的运行时支持和类型信息而占用 1.9 MB。
但是,当您向 Go 程序添加更多 fmt.Println() 调用时,大小保持一致。这是因为所需的库和运行时已包含在可执行文件中。添加新文本仅添加最少量的数据。
理解这种行为对于优化 Go 可执行文件至关重要。虽然 Go 的运行时支持提供了许多便利,但它是以文件大小为代价的。通过定制代码以仅使用必要的功能,您可以减少可执行文件的膨胀。
以上是为什么 Go 可执行文件比预期大得多?的详细内容。更多信息请关注PHP中文网其他相关文章!