2 回答
TA貢獻1995條經驗 獲得超2個贊
“Tree-shaking”適用于JavaScript,您將代碼以源代碼形式交付給運行時,并且刪除源代碼中未使用的位需要積極的努力(并且以結果仍然有效的方式執行此操作需要一些明智的分析)。
在編譯語言中,特別是在使用靜態鏈接時(Go幾乎總是如此),在未使用的函數中不鏈接就是這樣......如果沒有任何東西引用函數,那么就沒有理由發出它。這幾乎是默認行為。鏈接器必須知道所有調用的位置才能插入正確的地址,因此它不必做大量的額外工作來注意何時從不調用函數。
例如。如果我為自己創建了處理 Gin 和 Gorm 的實用程序函數 - 將這些函數放在 2 個單獨的庫中是否有意義?或者,即使我的應用程序沒有數據庫部分,將它們放在1個庫中并導入Gorm實用程序函數(以及Gorm依賴項)是完全無害的?
將它們放在一個庫中只是從依賴關系的角度來看是一個愚蠢的想法。如果一個程序使用你的庫,并且從不使用gorm,那么為什么它在其構建過程中需要gorm呢?為什么獲取或構建gorm的失敗有可能破壞從不使用它的程序的構建?您無需支付運行時或二進制大小的成本,而是支付可維護性成本。
TA貢獻1770條經驗 獲得超3個贊
導入的Go模塊中的所有內容是否都包含在我的應用程序中,還是涉及一些“樹搖動”并且只包含使用的代碼?
首先,您不能在 Go 中導入模塊。您只能導入包。
其次,Go是一種語言規范,因此是否使用“樹搖”或任何其他死代碼消除方法的問題取決于實現。
但話雖如此,一般來說,官方的Go編譯器,可能還有任何其他Go編譯器,都足夠聰明,可以不包括明顯未使用的東西。在這方面,它究竟有多聰明取決于確切的實現和版本。
如果我為自己創建了處理 Gin 和 Gorm 的實用程序函數 - 將這些函數放在 2 個單獨的庫中是否有意義?
是否在單個庫中有意義取決于您如何組織庫。以邏輯方式組織庫,而不是根據編譯器優化進行組織。相信編譯器可以完成其工作。
我可能不會把Gin和Gorm的實用程序函數放在同一個庫中,因為它們根本不相關。但這與編譯器的死代碼消除完全無關。
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報
