栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

golang为什么用import,而不用include

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang为什么用import,而不用include

一直疑惑golang为什么用import机制导入依赖包,而不用C/C++那种include机制导入依赖头文件。
反复思考,查找,实践,终于有些眉目,现在记录下来。

import编译过程 1、产生中间文件xx.a:

按照包粒度进行编译,生成每个包的package.a,比如context.a是context包编译产生的中间文件。

2、链接

将第一步生成的package1.a、package2.a … 等程序中所有包的中间文件,链接起来,生成可执行文件,作为编译产出。

include编译过程 1、产生中间文件xx.a

按照源文件粒度进行编译,每个.c/.cpp文件都会编译为同名的.a文件。
编译前会将所有的头文件都加入到源文件中,相当于扩展了源文件的代码数量。会有代码膨胀,同个头文件,在不同源文件中被依赖,这两个源文件没有相互依赖,则该被依赖的头文件会在这两个源文件中被编译两次。

2、链接

将第一步中生成的所有xx.a链接起来,行程可执行文件,作为编译产出。
从上面可以得出:
golang的import会减少依赖程序的编译次数,节约编译时间。
另外golang在编译器级别支持增量编译,go build可自动识别修改的包,只对修改的包进行编译(依赖、间接依赖被修改,也会重新编译)。
import导入机制、增量编译机制、关键字少(只有25个)使得golang编译速度比较快。
摘录其他人的表述:Go编译器是原生支持增量构建的,无需第三方构建管理工具的辅助。Go的增量构建是建立在Go 1.10引入的build cache机制的基础上的。Go的增量构建以Go包为单位,当Go包中的任一源文件发生变化时,Go都会对其进行重新构建,并且会连带构建所有直接或间接依赖该包的Go包
golang按照包粒度进行增量编译构建,这篇文章讲的很详细:golang增量构建

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号