我最近安装了go并尝试了hello world示例。
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
$ go build hello.go
返回大小为1.2Mb的hello二进制文件。这对于一个你好的世界计划来说相对来说是巨大的。有什么特别的原因,为什么文件大小?是因为导入“fmt”?
答案 0 :(得分:5)
这是a Go FAQ
为什么我的琐碎程序是如此大的二进制文件?
gc工具链(5l,6l和8l)中的连接体进行静态连接。 所有Go二进制文件因此包括Go运行时以及 支持动态类型检查所需的运行时类型信息, 反射,甚至是恐慌时间的堆栈痕迹。
一个简单的C“hello,world”程序,使用静态编译和链接 Linux上的gcc大约为750 kB,包括printf的实现。 使用fmt.Printf的等效Go程序大约是1.2 MB,但那样 包括更强大的运行时支持。
答案 1 :(得分:1)
是的,包“fmt”是其中一个原因。它还反过来导入其他包。但即使不使用“fmt”,也会将整个运行时静态链接到Go二进制文件中。 Go的运行时并不简单 - 它包括例如调度程序/ goroutine vs OS线程管理器,拆分堆栈分配器,垃圾收集器和垃圾收集器友好的内存分配器,它也是C线程友好,信号处理程序和堆栈跟踪生成器,。 ..