如何快速成为go语言 contributor
共 2166字,需浏览 5分钟
·
2021-03-07 22:20
处于某种不可告人的目的,笔者需要为go仓库贡献代码,而且是需要在最快的时间内。有很多人把为go仓库贡献代码看做是一种荣誉,在本文中,笔者将介绍自己为了实现这一目标所做的一些尝试。
准备工作
第一步是要在网上收集足够多的资料,这包括了什么是contributor、如何做一些基本的准备工作从而提交代码,并被审查。
什么是contributor
那么提交了什么样的代码才会被认为是golang contributor?假如我修改了gopl的代码算不算呢?
在go语言主仓库中有一个CONTRIBUTORS文件,里面记录了所有的贡献者,该文件是在每一个主版本发布时自动生成的,而生成的代码就在 golang.org/x/build/cmd/updatecontrib
中。可以看到,不仅仅是主分支,一些周边的工具,甚至是博客文章中出现的问题都可以被纠正。
代码提交准备
第二步是做一些准备工作,官方有一个介绍https://golang.org/doc/contribute
,最正规的方式包括了账号的认证,Gerrit平台的注册,并学习Gerrit的使用方法。Gerrit是用于代码审查的一个平台。
如果不想增加太多的心智负担,当然一种更加简单的方式是通过github 提交PR 请求,如果你是第一次提交,如下robot机器人会告诉你如何进行签名认证。
同时,你在github上的提交会同步到Gerrit上,robot机器人会告诉你对应的Gerrit地址。
学习其他contributor的经验
网上有许多优秀的文章讲述心得体会。
捕猎可能优化的点
把自己看做是一个猎手,而可能优化的点就被称为猎物。作为一个庞大的项目,始终会有很多不尽如人意的地方。笔者根据提交的难度,可以分为:修改错别字、修改注释与描述、完善测试、提高代码风格,修改bug、完成代码中的todo事项、新的特性。
越往后走其实就越不容易,Go语言每年会有几个月的代码冻结期,在此阶段除了修复bug和完善文档,其他代码是没有办法合并进入的。另外,新的特性要想合并入go代码中,花费的时间更加漫长。因为go语言内部有自己的规划、就好比泛型,错误处理都需要写草案,经历很长时间的论证和明确的milestone。
为了能够快速的提交代码,笔者选择了下面的策略。
选择难度较低的入手
不局限于找到一个优化点,用质量和数量增加合并几率
坚持每天花固定的时间狩猎
笔者首先选择了难度相对较低的几个步骤出发。分别为修改错别字、修改注释与描述、修改bug。
修改错别字
笔者用了一些工具来识别源码中可能出现的拼写错误。其中包括了word的拼写审查,和肉眼观察。借助人都会犯错的概率论视角,下图就是笔者提交的第一个代码,用了最小的代价,一个单词!
修改注释与描述
其实这也是相对较容易的一步,这种提高包括了注释中可能的描述错误或者更好的描述。可以选择自己比较熟悉的代码。笔者选择了垃圾回收那一部分的代码,主要是那一部分代码注释非常多,从概率上讲比较有出错的可能性。笔者每天花费了一些时间专门阅读注释,查找错误。最终还是发现了描述错误的地方,得到了aclements大神的认可。
修改bug
在生产中,要自己去发现go语言中可能的bug也不是那么容易的事情,因为用的人多了之后,代码是经受过考验的,一些大的问题很快就被修复了。在github 上每天都会有人提出一些issue,这个时候比较好的就是守株待兔,每天刷一下issue看看有什么问题。选择自己能力范围里的issue,调研并进行修复。一般时间越久的issue越棘手。
代码审查
代码审查是非常重要的环节,要想代码能够得到合并,至少要有两位指定成员的代码review并认可。
选择review成员
第一步就是要选择正确的给你review代码的人,review可能是自动生成的,但是我们可以对其进行添加了删除,选择最适合的审核人。如果你没有添加review,那么你的提交再优秀都可能没有人看到。
正确规范的提交
commit消息和描述要符合规范,这可以提高被合并的几率。不符合规范的是不可能能够合并的。查看提交规范:https://golang.org/wiki/CommitMessage
多轮审核
当你提交的代码越复杂,经常会看到review会给你提供很多的建议,这个时候要逐一讨论并进行修改。多次提交代码,直到代码被认可merge。
总结
本文讲述了笔者为了快速为go仓库贡献代码所做的一些尝试。这其中包括了准备工作、捕猎可能优化的点、以及代码审查策略。
希望大家不要像我一样这么着急,用高质量的improvement证明自己无愧是golang contributor.
推荐阅读