为了学好Golang底层知识装逼,折腾了一下编译器相关知识。下面的内容并不会提升你的生产技能点,但可以提高你的装逼指数。请按需进入!
本文目录速览:
认识 go build
当我们敲下 go build
的时候,我们的写的源码文件究竟经历了哪些事情?最终变成了可执行文件。
这个命令会编译go代码,今天就来一起看看go的编译过程吧!
首先先来认识以下go的代码源文件分类
- 命令源码文件:简单说就是含有 main 函数的那个文件,通常一个项目一个该文件,我也没想过需要两个命令源文件的项目
- 测试源码文件:就是我们写的单元测试的代码,都是以
_test.go
结尾 - 库源码文件:没有上面特征的就是库源码文件,像我们使用的很多第三方包都属于这部分
go build
命令就是用来编译这其中的 命令源码文件 以及它依赖的 库源码文件。下面表格是一些常用的选项在这里集中说明以下。
可选项 | 说明 |
---|---|
-a | 将命令源码文件与库源码文件全部重新构建,即使是最新的 |
-n | 把编译期间涉及的命令全部打印出来,但不会真的执行,非常方便我们学习 |
-race | 开启竞态条件的检测,支持的平台有限制 |
-x | 打印编译期间用到的命名,它与 -n 的区别是,它不仅打印还会执行 |
接下来就用一个 hello world 程序来演示以下上面的命令选项。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RzRQoOtc-1573696152676)(https://dayutalk.cn/img/go-byq-0.png)]
如果对上面的代码执行 go build -n
我们看一下输出信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4jG2DkH-1573696152677)(https://dayutalk.cn/img/go-byq-1.png)]
来分析下整个执行过程
这一部分是编译的核心,通过