Go 語言專案程式碼品質

本篇想介紹我在寫開源專案會用到的工具及服務,其實在編譯 Go 語言同時,就已經確保了一次程式碼品質,或者是在編譯之前會跑 go fmtgo vet 的驗證,網路上也蠻多工具可以提供更多驗證,像是:

  • errcheck (檢查是否略過錯誤驗證)
  • unused (檢查沒用到的 func, variable or const)
  • structcheck (檢查 struct 內沒有用到的 field)
  • varcheck (拿掉沒有用到的 const 變數)
  • deadcode (沒有用到的程式碼)

但是這麼多驗證工具,要一一導入專案,實在有點麻煩,我自己在公司內部只有驗證 go fmtgo vetmisspell-check (驗證英文單字是否錯誤) 及 vendor-check (驗證開發者是否有去修改過 vendor 而沒有恢復修正)。如果你有在玩開源專案,其實可以不用這麼麻煩,導入兩套工具就可以讓你安心驗證別人發的 PR。底下來介紹一套工具及另外一套雲端服務。

影片介紹

我錄製了一段影片介紹這兩套工具及服務,不想看本文的可以直接看影片


此影片同步在 Udemy 課程內,如果有購買課程的朋友們,也可以在 Udemy 上面觀看,如果想學習更多 Go 語言教學,現在可以透過 $1800 價格購買。

golangci.com 服務

先說好這套服務對於私有專案是需要付費的,如果是開源專案,請盡情使用,目前只有支援 GitHub 上面的專案為主,不支援像是 GitLab 或 Bitbucket。對於有在寫 Go 開源專案的開發者,務必啟用這服務,此服務幫忙驗證超多檢查,請看底下

Screen Shot 2018-09-20 at 9.36.50 AM

當然不只有幫忙整合 CI/CD 的功能,還會在每個 PR 只要遇到驗證錯誤,直接會有 Bot 留言

Check_if_token_expired_in_MiddlewareFunc_by_a180285_·_Pull_Request__169_·_appleboy_gin-jwt_🔊

非常的方便,假設您的團隊有在 GitHub 使用,強烈建議導入這套服務。另外也可以進入 Repo 列表內看到詳細的錯誤清單。

Report_for_Pull_Request_appleboy_gorush_undefined_🔊

go-critic 工具

go-critic 也是一套檢查程式碼品質的工具,只提供 CLI 方式驗證,不提供雲端整合服務,如果要導入 CI/CD 流程,請自行取用,為什麼特別介紹這套,這套工具其實是在幫助您如何寫出 Best Practice 的 Go 語言程式碼,就算你不打算用這套工具,那推薦壹定要閱讀完驗證清單,這會讓專案的程式碼品質再提升。像是寫 Bool 函式,可能會這樣命名:

1
func Enabled() bool

用了此工具,會建議寫成 (是不是更好閱讀了)

1
func IsEnabled() bool

還有很多驗證請自行參考,不過此工具會根據專案的大小來決定執行時間,所以我個人不推薦導入 CI/CD 流程,而是久久可以在自己電腦跑一次,一次性修改全部,這樣才不會影響部署時間。

心得

上面提供的兩套工具及服務,大家如果有興趣,歡迎導入,第一套雲服務我個人都用在開源專案,第二套工具,會用在公司內部專案,但是不會導入在 CI/CD 流程內。


See also