如何快速成為go語言 contributor
處于某種不可告人的目的,筆者需要為go倉庫貢獻(xiàn)代碼,而且是需要在最快的時間內(nèi)。有很多人把為go倉庫貢獻(xiàn)代碼看做是一種榮譽,在本文中,筆者將介紹自己為了實現(xiàn)這一目標(biāo)所做的一些嘗試。
準(zhǔn)備工作
第一步是要在網(wǎng)上收集足夠多的資料,這包括了什么是contributor、如何做一些基本的準(zhǔn)備工作從而提交代碼,并被審查。
什么是contributor
那么提交了什么樣的代碼才會被認(rèn)為是golang contributor?假如我修改了gopl的代碼算不算呢?
在go語言主倉庫中有一個CONTRIBUTORS文件,里面記錄了所有的貢獻(xiàn)者,該文件是在每一個主版本發(fā)布時自動生成的,而生成的代碼就在 golang.org/x/build/cmd/updatecontrib 中。可以看到,不僅僅是主分支,一些周邊的工具,甚至是博客文章中出現(xiàn)的問題都可以被糾正。

代碼提交準(zhǔn)備
第二步是做一些準(zhǔn)備工作,官方有一個介紹https://golang.org/doc/contribute ,最正規(guī)的方式包括了賬號的認(rèn)證,Gerrit平臺的注冊,并學(xué)習(xí)Gerrit的使用方法。Gerrit是用于代碼審查的一個平臺。
如果不想增加太多的心智負(fù)擔(dān),當(dāng)然一種更加簡單的方式是通過github 提交PR 請求,如果你是第一次提交,如下robot機(jī)器人會告訴你如何進(jìn)行簽名認(rèn)證。

同時,你在github上的提交會同步到Gerrit上,robot機(jī)器人會告訴你對應(yīng)的Gerrit地址。
學(xué)習(xí)其他contributor的經(jīng)驗
網(wǎng)上有許多優(yōu)秀的文章講述心得體會。
捕獵可能優(yōu)化的點
把自己看做是一個獵手,而可能優(yōu)化的點就被稱為獵物。作為一個龐大的項目,始終會有很多不盡如人意的地方。筆者根據(jù)提交的難度,可以分為:修改錯別字、修改注釋與描述、完善測試、提高代碼風(fēng)格,修改bug、完成代碼中的todo事項、新的特性。
越往后走其實就越不容易,Go語言每年會有幾個月的代碼凍結(jié)期,在此階段除了修復(fù)bug和完善文檔,其他代碼是沒有辦法合并進(jìn)入的。另外,新的特性要想合并入go代碼中,花費的時間更加漫長。因為go語言內(nèi)部有自己的規(guī)劃、就好比泛型,錯誤處理都需要寫草案,經(jīng)歷很長時間的論證和明確的milestone。
為了能夠快速的提交代碼,筆者選擇了下面的策略。
選擇難度較低的入手
不局限于找到一個優(yōu)化點,用質(zhì)量和數(shù)量增加合并幾率
堅持每天花固定的時間狩獵
筆者首先選擇了難度相對較低的幾個步驟出發(fā)。分別為修改錯別字、修改注釋與描述、修改bug。
修改錯別字
筆者用了一些工具來識別源碼中可能出現(xiàn)的拼寫錯誤。其中包括了word的拼寫審查,和肉眼觀察。借助人都會犯錯的概率論視角,下圖就是筆者提交的第一個代碼,用了最小的代價,一個單詞!

修改注釋與描述
其實這也是相對較容易的一步,這種提高包括了注釋中可能的描述錯誤或者更好的描述。可以選擇自己比較熟悉的代碼。筆者選擇了垃圾回收那一部分的代碼,主要是那一部分代碼注釋非常多,從概率上講比較有出錯的可能性。筆者每天花費了一些時間專門閱讀注釋,查找錯誤。最終還是發(fā)現(xiàn)了描述錯誤的地方,得到了aclements大神的認(rèn)可。

修改bug
在生產(chǎn)中,要自己去發(fā)現(xiàn)go語言中可能的bug也不是那么容易的事情,因為用的人多了之后,代碼是經(jīng)受過考驗的,一些大的問題很快就被修復(fù)了。在github 上每天都會有人提出一些issue,這個時候比較好的就是守株待兔,每天刷一下issue看看有什么問題。選擇自己能力范圍里的issue,調(diào)研并進(jìn)行修復(fù)。一般時間越久的issue越棘手。

代碼審查
代碼審查是非常重要的環(huán)節(jié),要想代碼能夠得到合并,至少要有兩位指定成員的代碼review并認(rèn)可。
選擇review成員
第一步就是要選擇正確的給你review代碼的人,review可能是自動生成的,但是我們可以對其進(jìn)行添加了刪除,選擇最適合的審核人。如果你沒有添加review,那么你的提交再優(yōu)秀都可能沒有人看到。

正確規(guī)范的提交
commit消息和描述要符合規(guī)范,這可以提高被合并的幾率。不符合規(guī)范的是不可能能夠合并的。查看提交規(guī)范:https://golang.org/wiki/CommitMessage
多輪審核
當(dāng)你提交的代碼越復(fù)雜,經(jīng)常會看到review會給你提供很多的建議,這個時候要逐一討論并進(jìn)行修改。多次提交代碼,直到代碼被認(rèn)可merge。

總結(jié)
本文講述了筆者為了快速為go倉庫貢獻(xiàn)代碼所做的一些嘗試。這其中包括了準(zhǔn)備工作、捕獵可能優(yōu)化的點、以及代碼審查策略。
希望大家不要像我一樣這么著急,用高質(zhì)量的improvement證明自己無愧是golang contributor.
推薦閱讀
