# 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)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information, you can query the documentation dynamically by asking a question.
Perform an HTTP GET request on a page URL with the `ask` query parameter:
```
GET https://gocompiler.shizhz.me/master.md?ask=<question>
```
The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.
Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
