gpt4 book ai didi

go - 为什么 Go 编译器只需要包含您直接导入的包?

转载 作者:IT王子 更新时间:2023-10-29 01:43:51 25 4
gpt4 key购买 nike

我一直在使用 Go,并且在某些地方读到 Go 编译器只需要包含您直接从 main 导入的包。
因此,与指数级的 C++ 相比,解决依赖性所需的时间是线性的。它是如何工作的?
如果 main 导入包 alpha 进而导入包 beta 那么 Go 编译器不需要编译整个树吗?

最佳答案

Go 编译器首先将单个包编译成单个目标文件。在这个阶段,它只需要解析它在编译的包中找到的所有 import。对于你的包的目标文件,只有调用同一个包或直接导入,所以这里没有问题。一个单独的链接阶段将所有目标文件链接在一起。在 doc of the compile package 中对此有一个很好的解释。 :

Compile, typically invoked as “go tool compile,” compiles a single Go package comprising the files named on the command line. It then writes a single object file named for the basename of the first source file with a .o suffix. The object file can then be combined with other objects into a package archive or passed directly to the linker (“go tool link”). If invoked with -pack, the compiler writes an archive directly, bypassing the intermediate object file.

The generated files contain type information about the symbols exported by the package and about types used by symbols imported by the package from other packages. It is therefore not necessary when compiling client C of package P to read the files of P's dependencies, only the compiled output of P.

关于go - 为什么 Go 编译器只需要包含您直接导入的包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com