如何高效地阅读 Go 源代码
目录
为什么看源代码?
1. 为了学习优雅代码,Go 源码理论上是所有 Go 项目代码模范
- 设计:代码风格规范,项目架构抽象,代码组织,代码实现,代码测试,逻辑处理,注释文档等方面。
- 性能:代码具体实现上如何保证高性能,看明白需要『操作系统,文件系统,IO异步处理,网络编程,并发处理机制等』知识储备,阅读过程可以修改调试跑 Benchmark 观察性能变化。
2. 学习编写健壮代码
- 以始为终:带着具体问题(Issue)阅读代码并找答案(PR),目的性的阅读而不是想读哪儿读哪儿;例如,看某些具体场景下会出现什么问题,关于这场景又有什么相关的讨论等。
- 了解完整链路:什么场景下容易出现问题;有哪些常见问题;针对这些问题一般有哪些常见的问题定位思路。
- 整个链路中最重要的部分是 Issue 上线文的阅读以及 PR 讨论的阅读,代码的具体实现倒并不是最最重要的。
3. 了解感兴趣(常用)模块(库)的代码实现
- 目就为了研究自己常用的库是否有潜在的 坑 ?是否能满足自己的使用场景?
- 结合自己的具体使用场景,针对库里的不同方法,做测试和 Benchmark,验证正确性和性能,保证逻辑和性能都能够满足自己的需求。
4. 了解项目历史
- 通过项目 Commit 历史了解,项目的具体变更记录。
阅读工具及使用方式
- 网页端:结合 Github + SourceGraph + BrowserPlugins 能够代码搜索,代码高亮,代码调整等基本阅读源码功能。
- 本地 IDE:使用 VSCODE / Goland 阅读,随时编辑代码跑测试验证正确性,也可以设置热键一键编译,一键测试。
- 欧长坤的工具箱
阅读的源码资源
1. 官方网站资源
2. Go 邮件组
3. Github Go Issue
4. Proposing Changes to Go
5. 其他资源地址
- dev.golang.org
- github.com/golang/go
- github.com/golang/proposal
- github.com/golang/go/wiki
- go-review.googlesource.com
- groups.google.com/g/golang-nuts
- groups.google.com/g/golang-dev
- groups.google.com/g/golang-tools
- reddit.com/r/golang
补充提示
- 如果没读过源代码则从优秀简单第三方库开始看,第三方库的代码比标准库代码好理解,比如看 Gin,Echo 是如何利用标准库构建自身库的
- 一开始选代码量少的,自己感兴趣的组件源码看,逐渐增加代码量和难度,多画画流程图总结分享出来让别人指导指导
以上内容是我 Talk Go 的 第 100 期 2020-08-13 如何高效的阅读 Go 代码? 的学习笔记。