为什么 NATS Golang 客户端在导入后会增加 5MB 的可执行文件大小?

我正在为即将开展的项目评估 NATS。为什么要测试它 当我为 NATS 客户端添加导入行并使用库中的一些简单调用时,我注意到编译后的可执行文件的大小从大约 2MB 变为 7MB。

我使用的是 Linux Mint 20.3,Golang 1.18,NATS 库是:github.com/nats-io/nats.go v1.16.0

谁能解释为什么只应该与服务器接口的库会向二进制文件添加如此大量的代码?

有什么办法可以减少这种情况吗?


杨__羊羊
浏览 122回答 1
1回答

浮云间

这种情况并不少见。您导入的代码不仅是接口,还包括所有接口实现和依赖项。Golang 不会对使用的导入进行 treeshake(如果这样做会很好),导致所有未使用的代码也被导入和编译。您会看到这种增加的其他示例是例如导入 kubernetes go mods 增加了 ~12MB,或使用 librdkafka kafka(几 MB)您可以使用编译器标志来减少增长:go build -ldflags "-s -w"它取出了一些调试信息,并且可以再次减小尺寸。您看到的尺寸减小(如果有的话)不仅仅是来自 NATS 导入。它也可能来自其他进口商品(如果您想查看这些标志的真正影响,请进行基准测试)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go