手记

【学习打卡】第4天 深入Go底层原理,重写Redis中间件实战 第3章

课程名称:深入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格式的汇编代码

0人推荐
随时随地看视频
慕课网APP