为什么使用 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中文网其他相关文章!