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 关注
- 101 浏览
添加回答
举报