Go Best Practices

今年一月,換到一家以 Go 為主力語言的公司。

習慣了 Java 紀律,一碰到 Go 的自由奔放,不禁想尋求一些 best practices 與 patterns。

以前我曾蒐集過一份 Go Best Practices 清單。浸潤 Go 半年後,再回頭看這些內容,當初不甚明瞭之處,竟然也懂了許多。便想重新整理一次,並加上個人的短評。

Travis CI 虛擬機的地雷

我算是 Travis CI 的老用戶了。

以前 Travis CI 很慢,對 Docker 不友善,又很難 debug,讓我一度將重心轉移到後起之秀 CircleCI。後來 Travis CI 向 CircleCI 看齊,讓我們能夠 ssh 進去虛擬機 debug,兩者的差距已經逐漸縮小。所以,我自己的重要專案,總是盡量同時掛上 Travis CI 及 CircleCI,讓 CI pipeline 的核心在某種程度上也能盡量 reproducible 不被 lock in。

Travis CI 也提供許多常見的程式語言及伺服器軟體,以方便做 CI 測試。我個人的習慣是,盡量不去使用這些功能,而是直接用 Docker 或 Docker Compose 來組裝,以降低對於 Travis CI 的依賴(尤其我還要兼顧 CircleCI)。

不過,如果是與人合作的專案,就得顧及其他人的習慣。我在使用 Travis CI 提供的伺服器軟體 Postgres、Cassandra、RabbitMQ 時,遇到一些雷,特地記錄下來,供有類似困擾的人參考。

Jira Board Hacks

實體看板

在導入 Scrum 時,我偏好實體看板。

實體看板容易 zoom in/out,利於適時切換俯瞰與細節視角,不需過度的數字管理。

實體看板的空間共時性,容易塑造團隊的一體感。

實體看板彈性大,能以最小成本,讓團隊在敏捷路上不斷嘗試與調整。

gRPC 測試工具

RESTful API 時代,我們有許多簡單好用的測試工具:有酷炫的 Postman,有命令列控愛用的 HTTPie,當然也有硬漢必備的萬用瑞士刀 curl

那麼,gRPC 呢?

這篇文章介紹兩個好用的小工具:gRPCurlghz,一個是輸入輸出介面測試工具,另一個是壓測工具,也順便介紹一些簡化測試的技巧。

gRPC Load Balancing in Kubernetes

Kubernetes 有個很方便的地方:只要修改 deployment 的 spec.replicas 數字,就能橫向擴展 pod,以應付更大的流量負載需求。

這一招,對於 stateless 的 HTTP 服務很管用,也是 Kubernetes 入門教學愛用的例子。但是,對於 gRPC 呢?