# Golang 编译器代码浅析

## Golang 编译器代码浅析

- [0. Golang 编译器代码浅析](https://gocompiler.shizhz.me/master.md)
- [1.1 编译器简介](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.1-bian-yi-qi-jian-jie.md)
- [1.2 Golang 编译器](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.2-golang-bian-yi-qi.md)
- [1.3 Go 语言版本](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.3-go-yu-yan-ban-ben.md)
- [1.4 项目设置](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.4-xiang-mu-she-zhi.md)
- [1.5 约定](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.5-yue-ding.md)
- [1.6 写作目的](https://gocompiler.shizhz.me/1.-golang-bian-yi-qi-qian-yan/1.6-xie-zuo-mu-de.md)
- [2.1 简介](https://gocompiler.shizhz.me/2.-golang-bian-yi-qi-ci-fa-fen-xi/2.1-jian-jie.md)
- [2.2 代码结构](https://gocompiler.shizhz.me/2.-golang-bian-yi-qi-ci-fa-fen-xi/2.2-dai-ma-jie-gou.md)
- [2.3 处理字符](https://gocompiler.shizhz.me/2.-golang-bian-yi-qi-ci-fa-fen-xi/2.3-chu-li-zi-fu.md)
- [2.4 扫描Token](https://gocompiler.shizhz.me/2.-golang-bian-yi-qi-ci-fa-fen-xi/2.4-sao-miao-token.md)
- [2.5 总结](https://gocompiler.shizhz.me/2.-golang-bian-yi-qi-ci-fa-fen-xi/2.5-zong-jie.md)
- [3A.1 语法分析简介](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.1-yu-fa-fen-xi-jian-jie.md)
- [3A.2 文法](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.2-wen-fa.md)
- [3A.3 语法解析](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3-yu-fa-jie-xi.md)
- [3A.3.1 自顶向下（Top-Down）](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.1-zi-ding-xiang-xia-topdown.md)
- [3A.3.2 自顶向下 - 递归下降](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.2-zi-ding-xiang-xia-di-gui-xia-jiang.md)
- [3A.3.3 自顶向下 - LL(1)文法](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.3-zi-ding-xiang-xia-ll1-wen-fa.md): 预测/匹配 解析器（Predicate/Match Parser）
- [3A.3.4 自底向上（Bottom-Up）](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.4-zi-di-xiang-shang-bottomup.md)
- [3A.3.5 自底向上 - LR(0)项集及SLR预测表](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.5-zi-di-xiang-shang-lr0-xiang-ji-ji-slr-yu-ce-biao.md)
- [3A.3.6 自底向上 - LR(1)、LALR](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.3.6-zi-di-xiang-shang-lr1lalr.md)
- [3A.4 语法分析工具](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.4-yu-fa-fen-xi-gong-ju.md)
- [3A.5 总结](https://gocompiler.shizhz.me/3.b-yu-fa-fen-xi-li-lun-zhi-shi/3.5-zong-jie.md)
- [3B.1 简介](https://gocompiler.shizhz.me/3.-golang-bian-yi-qi-yu-fa-fen-xi/3.1-jian-jie.md)
- [3B.2 代码结构](https://gocompiler.shizhz.me/3.-golang-bian-yi-qi-yu-fa-fen-xi/3.2-dai-ma-jie-gou.md)
- [3B.3 数据结构](https://gocompiler.shizhz.me/3.-golang-bian-yi-qi-yu-fa-fen-xi/3.3-shu-ju-jie-gou.md)
- [3B.4 构造语法树](https://gocompiler.shizhz.me/3.-golang-bian-yi-qi-yu-fa-fen-xi/3.4-gou-zao-yu-fa-shu.md)
- [3B.5 Unit Test及AST可视化](https://gocompiler.shizhz.me/3.-golang-bian-yi-qi-yu-fa-fen-xi/3.5-unit-test-ji-ast-ke-shi-hua.md)
- [4.1 简介](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.1-jian-jie.md)
- [4.2 代码结构](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/untitled-2.md)
- [4.3 符号解析](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.3-fu-hao-jie-xi.md)
- [4.4.1 数据结构 - 作用域](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.1-shu-ju-jie-gou-zuo-yong-yu.md)
- [4.4.2 数据结构 - Package](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.2-shu-ju-jie-gou-package.md)
- [4.4.3 数据结构 - Object 对象](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.3-shu-ju-jie-gou-object-dui-xiang.md)
- [4.4.4-1 类型数据结构 - 简介](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.41-lei-xing-shu-ju-jie-gou-jian-jie.md)
- [4.4.4-2 类型接口](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.42-lei-xing-shu-ju-jie-gou-jie-kou.md)
- [4.4.4-3 基础类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.43-lei-xing-shu-ju-jie-gou-ji-chu-lei-xing.md)
- [4.4.4-4 内置复合类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.44-nei-zhi-fu-he-lei-xing.md)
- [4.4.4-5 Struct 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.45-struct-lei-xing.md)
- [4.4.4-6 Interface 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.46-interface-lei-xing.md)
- [4.4.4-7 Named 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.47-named-lei-xing-fl.md)
- [4.4.4-8 Tuple 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.48-tuple-lei-xing.md)
- [4.4.4-9 Sum 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.49-sum-lei-xing.md)
- [4.4.4-10 Function & Method 类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.410-function-method-lei-xing.md)
- [4.4.4-11 泛型类型](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.411-fan-xing-lei-xing-fl.md)
- [4.4.4-12 类型的等价规则](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.412-lei-xing-de-deng-jia-gui-ze-fl.md)
- [4.4.4-13 类型的比较规则](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.413-lei-xing-de-bi-jiao-gui-ze.md)
- [4.4.4-14 总结](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.414-zong-jie.md)
- [4.4.5 类型检查器](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.5-lei-xing-jian-cha-qi.md): 与类型检查器相关的重要数据结构有三个，本节将分析其代码
- [4.4.6 总结](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.4.6-zong-jie.md)
- [4.5.1 类型检查逻辑 - 包加载器](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/lei-xing-jian-cha-luo-ji.md)
- [4.5.2 类型检查逻辑 - 初始化](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.2-lei-xing-jian-cha-luo-ji-chu-shi-hua.md)
- [4.5.2-1 全局作用域](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.21-quan-ju-zuo-yong-yu.md)
- [4.5.2-2 类型检查器](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.22-lei-xing-jian-cha-qi.md)
- [4.5.3 类型检查逻辑 - 流程分析](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.3-lei-xing-jian-cha-luo-ji-liu-cheng-fen-xi.md)
- [4.5.3-1.1 总体流程](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.1-zong-ti-liu-cheng.md)
- [4.5.3-1.2 类型检查准备工作](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.2-lei-xing-jian-cha-zhun-bei-gong-zuo.md)
- [4.5.3-1.3 类型检查核心逻辑](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3-lei-xing-jian-cha-he-xin-luo-ji.md)
- [4.5.3-1.3a 总体介绍](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3a-zong-ti-jie-shao.md)
- [4.5.3-1.3b 类型表达式的类型检查](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3b-lei-xing-biao-da-shi-de-lei-xing-jian-cha.md)
- [4.5.3-1.3c 求值表达式的类型检查](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3c-qiu-zhi-biao-da-shi-de-lei-xing-jian-cha.md)
- [4.5.3-1.3d 类型兼容性检查](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3d-lei-xing-jian-rong-xing-jian-cha.md)
- [4.5.3-1.3e 处理delayed队列](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.3e-chu-li-delayed-dui-lie.md)
- [4.5.3-1.4 构建初始化顺序](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.4-gou-jian-chu-shi-hua-shun-xu.md)
- [4.5.3-1.5 总结](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.31.5-zong-jie.md)
- [4.5.3-2 特定问题分析](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.32-te-ding-wen-ti-fen-xi.md)
- [4.5.3-2a 对象循环依赖检查](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.32a-dui-xiang-xun-huan-yi-lai-jian-cha.md)
- [4.5.3-2b 方法与属性查找](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.32b-fang-fa-yu-shu-xing-cha-zhao.md)
- [4.5.3-2c Underlying Type](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.5.3-2c-underlying-type.md)
- [4.6 如何测试](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.6-ru-he-ce-shi.md)
- [4.7 总结](https://gocompiler.shizhz.me/golang-bian-yi-qi-lei-xing-jian-cha/4.7-zong-jie.md)
- [5.1 简介](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/1.-jian-jie.md)
- [5.2 代码结构](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/2.-dai-ma-jie-gou.md)
- [5.3 数据结构](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/3.-shu-ju-jie-gou.md)
- [5.4 处理逻辑](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/untitled-2.md)
- [5.5 编译日志](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/5.5-bian-yi-ri-zhi.md)
- [5.6 Unit Test](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/5.6-unit-test.md)
- [5.7 总结](https://gocompiler.shizhz.me/golang-bian-yi-qi-ir-tree/5.7-zong-jie.md)
- [6.1 简介](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.1-jian-jie.md)
- [6.2 代码结构](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.2-dai-ma-jie-gou.md)
- [6.3 总体逻辑](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.3-zong-ti-luo-ji.md)
- [6.4 赋值语句](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.4-fu-zhi-yu-ju.md)
- [6.5 编译日志](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.5-bian-yi-ri-zhi.md)
- [6.6 Unit Test](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.6-unit-test.md)
- [6.7 总结](https://gocompiler.shizhz.me/6.-golang-bian-yi-qi-chu-shi-hua-ren-wu/6.7-zong-jie.md)
- [7.1 简介](https://gocompiler.shizhz.me/7.-golang-bian-yi-qi-qing-chu-wu-xiao-dai-ma/7.1-jian-jie.md)
- [7.2 处理逻辑](https://gocompiler.shizhz.me/7.-golang-bian-yi-qi-qing-chu-wu-xiao-dai-ma/7.2-chu-li-luo-ji.md)
- [7.3 Unit Test](https://gocompiler.shizhz.me/7.-golang-bian-yi-qi-qing-chu-wu-xiao-dai-ma/7.3-unit-test.md)
- [8.1 简介](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.1-jian-jie.md)
- [8.2 Inline的问题](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.2-inline-de-wen-ti.md)
- [8.3 代码结构](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.3-dai-ma-jie-gou.md)
- [8.4 处理逻辑](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4-chu-li-luo-ji.md)
- [8.4.1 遍历调用链](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.1-bian-li-tiao-yong-lian.md)
- [8.4.2 内联判断](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.2-nei-lian-pan-duan.md)
- [8.4.3 内联操作](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.3-nei-lian-cao-zuo.md)
- [8.4.4 编译日志](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.4-bian-yi-ri-zhi.md)
- [8.4.5 Unit Test](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.5-unit-test.md)
- [8.4.6 总结](https://gocompiler.shizhz.me/8.-golang-bian-yi-qi-inline/8.4.6-zong-jie.md)
- [9.1 什么是逃逸分析](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.1-shen-me-shi-tao-yi-fen-xi.md)
- [9.2 Go 的逃逸分析](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.2-go-de-tao-yi-fen-xi.md)
- [9.3 算法思路](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.3-suan-fa-si-lu.md)
- [9.4 代码结构](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.4-dai-ma-jie-gou.md)
- [9.5 处理逻辑](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.5-chu-li-luo-ji.md)
- [9.5.1总体逻辑](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.5.1-zong-ti-luo-ji.md)
- [9.5.2 数据结构](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.5.2-shu-ju-jie-gou.md)
- [9.5.3 构建数据流有向图](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.5.3-gou-jian-shu-ju-liu-you-xiang-tu.md)
- [9.5.4 逃逸分析](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.5.4-tao-yi-fen-xi.md)
- [9.6 编译日志](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.6-bian-yi-ri-zhi.md)
- [9.7 Unit Test](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.7-unit-test.md)
- [9.8 总结](https://gocompiler.shizhz.me/9.-golang-bian-yi-qi-tao-yi-fen-xi/9.8-zong-jie.md)
- [10.1 简介](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.1-jian-jie.md)
- [10.2 编译函数](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.2-bian-yi-han-shu.md)
- [10.2.1 SSA](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.2.1-ssa.md)
- [10.2.2 ABI](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.2.2-abi.md)
- [10.2.3 并发控制](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.2.3-bing-fa-kong-zhi.md)
- [10.3 导出对象文件](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.3-dao-chu-dui-xiang-wen-jian.md)
- [10.4 总结](https://gocompiler.shizhz.me/10.-golang-bian-yi-qi-han-shu-bian-yi-ji-dao-chu/10.4-zong-jie.md)
- [11. Golang 编译器 - 写在最后](https://gocompiler.shizhz.me/11.-golang-bian-yi-qi-xie-zai-zui-hou.md)
