目录

如何高效地阅读 Go 源代码

为什么看源代码?

1. 为了学习优雅代码,Go 源码理论上是所有 Go 项目代码模范

  • 设计:代码风格规范,项目架构抽象,代码组织,代码实现,代码测试,逻辑处理,注释文档等方面。
  • 性能:代码具体实现上如何保证高性能,看明白需要『操作系统,文件系统,IO异步处理,网络编程,并发处理机制等』知识储备,阅读过程可以修改调试跑 Benchmark 观察性能变化。

2. 学习编写健壮代码

  • 以始为终:带着具体问题(Issue)阅读代码并找答案(PR),目的性的阅读而不是想读哪儿读哪儿;例如,看某些具体场景下会出现什么问题,关于这场景又有什么相关的讨论等。
  • 了解完整链路:什么场景下容易出现问题;有哪些常见问题;针对这些问题一般有哪些常见的问题定位思路。
  • 整个链路中最重要的部分是 Issue 上线文的阅读以及 PR 讨论的阅读,代码的具体实现倒并不是最最重要的。

3. 了解感兴趣(常用)模块(库)的代码实现

  • 目就为了研究自己常用的库是否有潜在的 ?是否能满足自己的使用场景?
  • 结合自己的具体使用场景,针对库里的不同方法,做测试和 Benchmark,验证正确性和性能,保证逻辑和性能都能够满足自己的需求。

4. 了解项目历史

  • 通过项目 Commit 历史了解,项目的具体变更记录。

阅读工具及使用方式

  1. 网页端:结合 Github + SourceGraph + BrowserPlugins 能够代码搜索,代码高亮,代码调整等基本阅读源码功能。
  2. 本地 IDE:使用 VSCODE / Goland 阅读,随时编辑代码跑测试验证正确性,也可以设置热键一键编译,一键测试。
  3. 欧长坤的工具箱

阅读的源码资源

1. 官方网站资源

2. Go 邮件组

3. Github Go Issue

4. Proposing Changes to Go

5. 其他资源地址

补充提示

  1. 如果没读过源代码则从优秀简单第三方库开始看,第三方库的代码比标准库代码好理解,比如看 Gin,Echo 是如何利用标准库构建自身库的
  2. 一开始选代码量少的,自己感兴趣的组件源码看,逐渐增加代码量和难度,多画画流程图总结分享出来让别人指导指导

以上内容是我 Talk Go第 100 期 2020-08-13 如何高效的阅读 Go 代码? 的学习笔记。