今年一月,換到一家以 Go 為主力語言的公司。
習慣了 Java 紀律,一碰到 Go 的自由奔放,不禁想尋求一些 best practices 與 patterns。
以前我曾蒐集過一份 Go Best Practices 清單。浸潤 Go 半年後,再回頭看這些內容,當初不甚明瞭之處,竟然也懂了許多。便想重新整理一次,並加上個人的短評。
語言基礎
自從 1991 年 Effective C++ 橫空出世,以後任何書敢冠上 “Effective” 之名,幾乎都是重量級的保證。
“Effective Go” 這份文件,雖然篇幅還沒充實到足以成為一本書,但內容名副其實,原汁原味道出 Go 的核心風格,是非常好的入門補充讀物。
Package 命名與組織
▷ Style guideline for Go packages
這篇短文可以幫助你學會「正統」的 Go package 風格。
中小規模的程式結構
知名輕量級框架 Go kit 作者 Peter Bourgon 分享過許多實務經驗,其中這兩篇文章很值得一讀:
▷ Go best practices, six years in
▷ Go for Industrial Programming
或許是因為我們公司自建的 Go 微服務框架 Orion 1,骨幹結構非常接近 Go kit,所以我對這兩篇文章非常有感。
專案佈局
其他程式語言的經驗愈多,愈容易把 ~~~不良習慣~~~ 不搭配的習慣帶進 Go 來,尤其是專案佈局風格。
在 Go 裡,通常最簡單的專案佈局方式是:你選用哪一個主框架,就遵照著它建議的佈局。
不過,如果用的是像 Gin 這種超輕量的迷你框架,或者根本沒有套用任何框架,那麼,以下這一篇文章、一份範例,是很好的起點:
即使你信仰 DDD (domain driven design) 或 clean architecture 路線,也盡量不要不假思索將其他語言的實踐風格直接照搬過來——你會寫出很醜陋的 Go 程式。
Design Patterns
熟悉 design patterns 的人,可從這裡得到用 Go 實作的靈感。
-
關於 Orion,詳見〈在旋轉拍賣 Carousell 一年看到的後端架構、挑戰與生活〉一文。 ↩︎