Skip to content

lishuo5263/go-under-the-hood

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

logo

Go under the hood

目前基于 go1.11.1

致潜在读者

此仓库的内容可能勾起你的兴趣,如果你想要关注本仓库的更新情况,可以点击仓库的 Watch。 此仓库才刚刚开始,笔者因各方面事情都很忙,并仅刚开始尝试阅读 Go 源码,由于各种不可抗力和一时兴起, 更新可能会很慢(也会很乱,不一定顺序更新内容)。

如果你也希望参与贡献,欢迎提交 issue 或 pr。

为什么要研究源码?

研究 Go 源码有几个初衷:

  1. 出于对技术的纯粹兴趣;
  2. 工作需要,需要了解更多关于 Go 运行时 GC、cgo 等细节以优化性能。

为什么不读现有的源码分析?

确实已经有很多很多讨论 Go 源码的文章了,不读他们的文章有几个原因:

  1. 别人的是二手资料,自己的是一手资料,通过理解别人理解代码的思路来理解代码,增加了额外的成本,不如直接理解代码。
  2. 比较完整的资料已经存在一定程度上的过时,Go 运行时的开发是相当活跃的,本仓库目前基于 1.11.1。

那关注什么?

本仓库主要关注与运行时相关的代码,例如 runtime/cgo/sync/net/syscall 等。 在极少数的情况下,会讨论不同平台下的差异,代码实验以 darwin 为基础,linux 为辅助关注点,其他平台几乎不关注。 作为 Go 1.11 起引入的 wasm 特性,我们特别给 WebAssembly 平台以特别关注。

所以,诸如 crypto/database/regexp/strings/strconv/sort/container/unicode 等一些运行时无关的标准库 可能不在研究范围。

目录

  1. 引导
  2. 初始化概览
  3. 主 goroutine 生命周期
  4. 内存分配器
  5. 调度器
  6. 垃圾回收器
  7. 关键字
  8. 运行时杂项
  9. unsafe
  10. cgo
  11. 依赖运行时的标准库
  12. 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

Acknowledgement

The author would like to thank @egonelbre for his charming gopher design.

许可

Go under the hood | CC-BY-NC-ND 4.0 & MIT © changkun

Releases

No releases published

Packages

No packages published

Languages

  • Go 86.4%
  • Assembly 11.1%
  • C 1.9%
  • Python 0.6%
  • Shell 0.0%
  • C++ 0.0%