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

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

導入的圍棋模塊中的所有內容是否都包含在我的應用程序中?

導入的圍棋模塊中的所有內容是否都包含在我的應用程序中?

Go
慕雪6442864 2022-08-15 15:51:49
導入的 Go 包中的所有內容是否都包含在我的應用程序中,還是丟棄了未使用的代碼?像Javascript的“樹搖”這樣的東西?例如。如果我為自己創建了處理Gin和Gorm(或其他一些第三方功能)的實用程序函數 - 將我的實用程序函數也打包在單獨的庫中還是將它們捆綁在一個庫中是否有意義?
查看完整描述

2 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

“Tree-shaking”適用于JavaScript,您將代碼以源代碼形式交付給運行時,并且刪除源代碼中未使用的位需要積極的努力(并且以結果仍然有效的方式執行此操作需要一些明智的分析)。

在編譯語言中,特別是在使用靜態鏈接時(Go幾乎總是如此),在未使用的函數中不鏈接就是這樣......如果沒有任何東西引用函數,那么就沒有理由發出它。這幾乎是默認行為。鏈接器必須知道所有調用的位置才能插入正確的地址,因此它不必做大量的額外工作來注意何時從不調用函數。

例如。如果我為自己創建了處理 Gin 和 Gorm 的實用程序函數 - 將這些函數放在 2 個單獨的庫中是否有意義?或者,即使我的應用程序沒有數據庫部分,將它們放在1個庫中并導入Gorm實用程序函數(以及Gorm依賴項)是完全無害的?

將它們放在一個庫中只是從依賴關系的角度來看是一個愚蠢的想法。如果一個程序使用你的庫,并且從不使用gorm,那么為什么它在其構建過程中需要gorm呢?為什么獲取或構建gorm的失敗有可能破壞從不使用它的程序的構建?您無需支付運行時或二進制大小的成本,而是支付可維護性成本。


查看完整回答
反對 回復 2022-08-15
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

導入的Go模塊中的所有內容是否都包含在我的應用程序中,還是涉及一些“樹搖動”并且只包含使用的代碼?

首先,您不能在 Go 中導入模塊。您只能導入包。

其次,Go是一種語言規范,因此是否使用“樹搖”或任何其他死代碼消除方法的問題取決于實現。

但話雖如此,一般來說,官方的Go編譯器,可能還有任何其他Go編譯器,都足夠聰明,可以不包括明顯未使用的東西。在這方面,它究竟有多聰明取決于確切的實現和版本。

如果我為自己創建了處理 Gin 和 Gorm 的實用程序函數 - 將這些函數放在 2 個單獨的庫中是否有意義?

是否在單個庫中有意義取決于您如何組織庫。以邏輯方式組織庫,而不是根據編譯器優化進行組織。相信編譯器可以完成其工作。

我可能不會把Gin和Gorm的實用程序函數放在同一個庫中,因為它們根本不相關。但這與編譯器的死代碼消除完全無關。


查看完整回答
反對 回復 2022-08-15
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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