课程名称:深入Go底层原理,重写Redis中间件实战
课程章节:Go程序是如何编译的
主讲老师:Moody
课程内容:
今天学习的内容包括:
查看代码编译过程
Go语言的编译流程
课程收获:
查看代码编译过程
go build -n main.go # 只输出编译过程,而不实际编译
Go语言的编译流程
- 词法分析
- 将代码翻译成Token(Token的最小语义结构)
- 比如:“package main” 拆分为 “package” 和 “main”
- 比如:“import “fmt”” 拆分为 “import”、“"”、“fmt”、“"”
- 句法分析
- 把Token变成一棵语法树(也叫作抽象语法树AST)
- 语义分析
- 类型检查
- 类型推断
- 函数内联的优化
- 逃逸分析(即Go的变量该放在栈上还是放在堆上)
- 中间码生成
- 生成与平台无关的汇编代码(SSA)
- 设置 $env:GOSSAFUNC=“main”(Windows平台的环境变量来查看main函数生成SSA的过程)
- 然后 go build main.go 得到 ssa.html 即可查看对应SSA的编译过程
- 代码优化
- 机器码生成
- go build -gcflags -S main.go 查看生成的Plan9格式的汇编代码
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦