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

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

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

語言基礎

Effective 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 這種超輕量的迷你框架,或者根本沒有套用任何框架,那麼,以下這一篇文章、一份範例,是很好的起點:

Standard Package Layout

Standard Go Project Layout

即使你信仰 DDD (domain driven design)clean architecture 路線,也盡量不要不假思索將其他語言的實踐風格直接照搬過來——你會寫出很醜陋的 Go 程式。

Design Patterns

awesome-patterns

熟悉 design patterns 的人,可從這裡得到用 Go 實作的靈感。