# 1.3 Go 语言版本

该系列文章基于 [master](https://github.com/golang/go/tree/master) 分支的最新代码，截止本系列文章结束，最新的 commit 是 `d26fc68aa10dc8eda5ccdcc80d790e7df2fd9823`, 建议读者基于相同的 commit 来搭建项目及阅读该系列文章。

Go 编译器的开发工作一直在活跃地进行，从最初 C 语言的版本到实现自举，一直到当前阶段，Go Team 一边在增加新的语言特性，一边在对以往的模块进行重构，甚至重写。当前阶段最大的开发工作集中在泛型上，与此同时也在重写整个类型检查模块，在 1.16 版本发布之前，这部分的开发工作一直在 `dev.typeparams` 分支上进行，随着 1.16 的发布以及 1.17 开发工作的展开，该分支的所有内容已经合并到 `master` 分支（参考 [Planning Go 1.17](https://groups.google.com/g/golang-dev/c/DriIMM7VoLs)）。新版本的代码除了增加了对泛型的支持，整个类型检查系统与之前的版本有很大的差异，虽然目前并没有确定，但是根据最新的代码结构以及 [Russ’s Plan](https://groups.google.com/g/golang-dev/c/U7eW9i0cqmo/m/ffs0tyIYBAAJ), 从 1.18 版开始，随着泛型功能的发布，整个编译器应该大概率会采用新版本的类型检查系统（参见 [编译器开发组的讨论](https://github.com/golang/go/issues/43930)）。

本文开始写于 1.16 版本发布之前，最开始是基于 1.15.6 的代码，但随着对以上信息的了解，作者认为没有必要写一系列发表即过时的分析文章，尽管此时距离 1.18 的发布乐观估计还有一年时间，但考虑到代码结构上的巨大改变，同时为了覆盖正在开发的泛型特性，作者还是决定基于 `master` 分支的最新代码来进行分析，由于 `master` 分支的开发工作非常活跃，所以文中所引用的代码位置以及各种文件、函数等名称可能无法随时保持一致，请读者理解。等 Go Team 完成了该部分的开发工作之后，我将会选择一个 Frozen 分支并将所有引用的位置固定。
