亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Go 編譯器只需要包含您直接導入的包?

為什么 Go 編譯器只需要包含您直接導入的包?

Go
aluckdog 2023-06-05 19:43:07
我一直在使用 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 的編譯輸出。


查看完整回答
反對 回復 2023-06-05
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號