高效阅读GO代码

142 阅读3分钟
  1. 带着问题找答案
  2. main/test 入口函数
  3. package
  4. Exported function层级调用
  5. 兴趣
  6. 变更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