- 带着问题找答案
- main/test 入口函数
- package
- Exported function层级调用
- 兴趣
- 变更Commit
从什么角度读代码
- 学习优雅代码(这里的优雅我暂时分为这几类)
- 这种目的的代码阅读,需要有系统底层相关的背景,包括但不仅限于:操作系统,文件系统,IO异步处理,网络编程,并发处理机制等等。带着相关背景去看代码实现,结合具体系统负载看目标库是如何做技术选型的,建议在过程中不断用benchmark验证想法
- 这种目的的代码阅读,需要有一定的背景知识,了解目标库的具体业务场景,从具体场景出发,了解目标库的代码实现优雅之美,自己带着问题思考,如果自己来做同样功能/逻辑的实现,能否有不同的方法,再和目标库的实现作对比
- 架构优雅:简洁优雅的架构/抽象,如何恰当使用语言机制实现具体功能
- 性能优雅:如何提升代码性能,这部分一般偏向并发编程&底层编程
- 学习编写健壮代码
- 这种目的的代码阅读,需要从具体问题出发,一般从issue开始,看某些具体场景下会出现什么问题,后面又有什么相关的讨论,之后结合Pull Request又是做出了怎样的修复。从这个完整的链路出发,了解到:什么场景下容易出现问题;有哪些常见问题;针对这些问题一般有哪些常见的问题定位思路;如果前面几步都很顺利的话,最后的解决方案几乎是最简单的步骤了。整个链路中最重要的部分是issue上线文的阅读以及PR讨论的阅读,代码的具体实现倒并不是最最重要的
- 了解自己常使用库的实现
- 这种目的出发的代码阅读目的性就很明确,就是为了看自己使用库是否有潜在的“坑”?是否能满足自己的使用场景?这种情况可以结合自己的具体使用场景,针对库里的不同方法,一点一点做test和benchmark,验证正确性和性能,保证逻辑和性能都能够满足自己的需求
阅读代码从哪儿来?
- 首先是Go语言的官方网站blog.golang.org/ ,会介绍很多Go的最佳实践,如果对背后的具体实现逻辑感兴趣,可以去阅读相关代码
- 其次是Go邮件组groups.google.com/forum/#!for… 这里会有很多Go主题的讨论,Go core team的工程师也会在这里回答很多问题
- 还有就是你所关注库的Github issue区,经常会有一些求助&讨论
- 最后是Go的语言提案github.com/golang/prop…新的语言层级的提案会在这里列出,可以最快掌握语言层面的新特性
网站资料:
初阶资料:
golang.org/doc
blog.golang.org
golang.org/pkg
进阶资料:
dev.golang.org
github.com/golang/go
github.com/golang/prop…
github.com/golang/go/w…
go-review.googlesource.com
groups.google.com/g/golang-nu…
groups.google.com/g/golang-de…
groups.google.com/g/golang-to…
twitter.com/home
reddit.com/r/golang
前沿资料:
www.sigplan.org
dl.acm.org
arxiv.org/list/cs.PL/…
scholar.google.de