2013-03-10 58 views
0

我最近安裝去了,正在嘗試你好世界的例子。爲什麼Go編譯版本比較龐大?

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

$去建立hello.go

返回Hello,二進制文件是1.2MB大小。這對於一個你好的世界節目來說相當大。關於爲什麼文件大小很大的任何特定原因?是因爲輸入「fmt」嗎?

+0

它靜態編譯所有依賴關係未被解除。想象一下易於部署! – janislaw 2013-03-10 19:08:20

回答

5

這是a Go FAQ

爲什麼是我瑣碎的程序如此大的二進制?

在GC工具鏈(5L,6L和,8L與)的接頭做靜態鏈接。 因此,所有Go二進制文件都包含Go運行時間,以及支持動態類型檢查,反射,甚至恐慌時間堆棧跟蹤所需的運行時類型信息。

在Linux上使用 gcc靜態編譯和鏈接的簡單C「hello,world」程序大約爲750 kB,包括printf的實現。 使用fmt.Printf的等效Go程序大約爲1.2 MB,但該 包含更強大的運行時支持。

1

是的,包「fmt」是原因之一。它也反過來導入其他包。但即使不使用「fmt」,也會將整個運行時間靜態鏈接到Go二進制文件中。 Go的運行時不是一個簡單的例子 - 它包括例如調度程序/ goroutine vs OS線程管理器,拆分堆棧分配器,垃圾回收器和垃圾回收器友好的內存分配器,這也是C線程友好的,信號處理器和堆棧跟蹤生成器。 ..

相關問題