我一直在使用 Go,并在某些地方讀到 Go 編譯器只需要包含您直接從main.因此,與指數級的 C++ 相比,解決依賴性所需的時間是線性的。這是如何運作的?如果main導入包alpha又導入包beta,那么 Go 編譯器不需要編譯整個樹嗎?
1 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
Go 編譯器首先將單個包編譯成單個目標文件。在這個階段,它只需要解析import
它在它編譯的包中找到的所有。對于你的包的目標文件,只有調用同一個包或直接導入,所以這里沒有問題。一個單獨的鏈接階段將所有目標文件鏈接在一起。在編譯包的文檔中對此有一個很好的解釋:
編譯,通常被調用為“go tool compile”,編譯一個包含命令行上命名的文件的 Go 包。然后它寫入一個單一的目標文件,該文件以第一個源文件的基本名稱命名,后綴為 .o。然后目標文件可以與其他目標文件組合成包存檔或直接傳遞給鏈接器(“go tool link”)。如果使用 -pack 調用,編譯器會直接寫入存檔,繞過中間目標文件。
生成的文件包含有關包導出的符號的類型信息以及有關包從其他包導入的符號使用的類型的信息。因此在編譯包 P 的客戶端 C 時不需要讀取 P 的依賴文件,只需讀取 P 的編譯輸出。
- 1 回答
- 0 關注
- 130 瀏覽
添加回答
舉報
0/150
提交
取消