登录
首页 >  Golang >  Go问答

Go编译器为什么只需引入直接使用的包?

来源:stackoverflow

时间:2024-03-27 17:21:31 405浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《Go编译器为什么只需引入直接使用的包?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我一直在使用 Go,并且在某些地方读到 Go 编译器只需要包含您直接从 main 导入的包。

因此,解决依赖关系所需的时间是线性的,而 C++ 的时间是指数级的。 这是如何运作的?

如果 main 导入包 alpha ,而包又导入包 beta 那么 Go 编译器不需要编译整个树吗?


解决方案


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

编译,通常被称为“go工具编译”,编译单个Go 包含命令行上命名的文件的包。然后它写 以第一个源文件的基本名称命名的单个目标文件 带 .o 后缀。然后目标文件可以与其他文件组合 对象放入包存档中或直接传递给链接器(“go 工具链接”)。如果使用 -pack 调用,编译器会写入一个存档 直接绕过中间目标文件。

生成的文件包含有关符号的类型信息 由包导出以及由导入的符号使用的类型 来自其他包的包。因此,当 编译P包的客户端C来读取P的依赖文件, 仅 P 的编译输出。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go编译器为什么只需引入直接使用的包?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>