目前基于 go1.11.1
此仓库的内容可能勾起你的兴趣,如果你想要关注本仓库的更新情况,可以点击仓库的 Watch。 此仓库才刚刚开始,笔者因各方面事情都很忙,并仅刚开始尝试阅读 Go 源码,由于各种不可抗力和一时兴起, 更新可能会很慢(也会很乱,不一定顺序更新内容)。
如果你也希望参与贡献,欢迎提交 issue 或 pr。
研究 Go 源码有几个初衷:
- 出于对技术的纯粹兴趣;
- 工作需要,需要了解更多关于 Go 运行时 GC、cgo 等细节以优化性能。
确实已经有很多很多讨论 Go 源码的文章了,不读他们的文章有几个原因:
- 别人的是二手资料,自己的是一手资料,通过理解别人理解代码的思路来理解代码,增加了额外的成本,不如直接理解代码。
- 比较完整的资料已经存在一定程度上的过时,Go 运行时的开发是相当活跃的,本仓库目前基于 1.11.1。
本仓库主要关注与运行时相关的代码,例如 runtime
/cgo
/sync
/net
/syscall
等。
在极少数的情况下,会讨论不同平台下的差异,代码实验以 darwin 为基础,linux 为辅助关注点,其他平台几乎不关注。
作为 Go 1.11 起引入的 wasm
特性,我们特别给 WebAssembly 平台以特别关注。
所以,诸如 crypto/database/regexp/strings/strconv/sort/container/unicode
等一些运行时无关的标准库
可能不在研究范围。
- 引导
- 初始化概览
- 主 goroutine 生命周期
- 内存分配器
- 调度器
- 垃圾回收器
- 关键字
- 运行时杂项
unsafe
cgo
- 依赖运行时的标准库
- WebAssembly
→ go version
go version go1.11.1 darwin/amd64
→ uname -a
Darwin changkun-pro 18.0.0 Darwin Kernel Version 18.0.0: Wed Aug 22 20:13:40 PDT 2018; root:xnu-4903.201.2~1/RELEASE_X86_64 x86_64
The author would like to thank @egonelbre for his charming gopher design.
Go under the hood | CC-BY-NC-ND 4.0 & MIT © changkun