为什么Go编译器会产生大的二进制文件?
例如,在编译下面的代码之后,我得到一个1.8 MB的exec文件
package main
import "fmt"
func main(){
fmt.Println("Hello World")
}
我在 Ubuntu 和 Win7 上测试了上述代码,结果是一样的!
我还用+70行代码编写了一个更大的程序,结果二进制文件再次出人意料地为1.8 MB(实际上有几个字节差异)。我想知道Go编译器将什么转储到二进制文件中。
答案 0 :(得分:13)
Why is my trivial program such a large binary?(来自Go Programming Language FAQ):
gc工具链(5l,6l和8l)中的连接体进行静态连接。 所有Go二进制文件因此包括Go运行时,以及支持动态类型检查,反射甚至恐慌时间堆栈跟踪所需的运行时类型信息。
在Linux上使用gcc静态编译和链接的简单C“hello,world”程序大约为750 kB,包括printf的实现。使用fmt.Printf的等效Go程序大约为1.2 MB,但这包括更强大的运行时支持。