首页  >  文章  >  后端开发  >  为什么即使不使用 C 绑定,禁用 CGO 也会减慢 Go 编译速度?

为什么即使不使用 C 绑定,禁用 CGO 也会减慢 Go 编译速度?

Susan Sarandon
Susan Sarandon原创
2024-11-09 00:52:02905浏览

Why Does Disabling CGO Slow Down Go Compilation Even Without Using C Bindings?

为什么使用 CGO_ENABLED=0 进行编译会导致速度变慢

尽管不使用 C 绑定,但使用 CGO_ENABLED=0 进行编译会明显减慢编译速度。要了解其原因,我们必须深入研究其中的机制。

标准库包是使用预定的编译标志构建的。当 CGO_ENABLED 设置为 0 时,构建标志会被修改,从而使预构建的包不兼容。因此,大部分标准库必须重新构建。

虽然“go build -i”可以安装使用新标志构建的软件包,但它并不能完全解决问题。安装使用 CGO_ENABLED=0 构建的包可以加速具有相同标志的未来构建,但会阻碍没有它的构建。

预构建包的默认安装方法效率低下,所有包都存储在具有相同目录的同一目录中名称,无论其构建配置如何。要使用不同的标志启用快速构建,“go build -i”应与“-installsuffix”或“-pkgdir”标志结合使用。通过为每个编译模式分配一个唯一的目录,可以无缝地容纳具有不同标志的单独构建。

以上是为什么即使不使用 C 绑定,禁用 CGO 也会减慢 Go 编译速度?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn