-2
我一直在試圖找到這個問題的答案沒有成功。如何在多個源文件中解析導入語句?
這個問題是關於當一個包由多個源文件組成時,Go中的import語句。
比方說,我有一個名爲math
包,其中包含多個文件:
|-- math
|-- add.go
|-- subtract.go
|-- divide.go
|-- multiply.go
讓我們假設math
包利用了fmt
包的,因此它需要相應的import語句。但由於我們有四個單獨的文件,我們必須將fmt
包多次導入(至少對我的理解):
// add.go
import "fmt"
// subtract.go
import "fmt"
// divide.go
import "fmt"
// multiply.go
import "fmt"
現在的問題是,會發生什麼時,包被編譯?這些陳述是否合併在一起?
如果是這樣,爲什麼我們必須多次導入包(每個文件一次),而不是隻有一個包含所有導入語句的文件,以免重複自己?
因此,當我四次導入'fmt'包時,編譯器如何確保它不會在同一個構建中連接四次包?我假設由於導入語句只有'文件範圍',編譯器必須以某種方式組合所有導入的庫,以避免兩次鏈接同一個庫。 – Rtsne42
編譯器只構建一次任何包。如果你想知道它是怎麼做的,請閱讀編譯源代碼,它是[開源的,可在GitHub上獲得](https://github.com/golang/go)。 – Adrian
@ Rtsne42標識符的範圍與編譯器和鏈接器加載包的方式無關。這些工具足夠聰明,可以加載任何給定的軟件包一次。 –