Architecture and Best Practices in Go
For best practices written by the Go team check out Effective Go
Currently the best architecture for Go applications, in my opinion, is the domain driven hexagonal architecture: Link.
It's so suitable because Go provides loosely coupled interface implementation to use dependency injection and packaging makes it clear, which struct belongs to which "layer".
Two Known Architecture Principles
There are two known architecture principles in Go. The "flat" architecture and the "domain driven" architecture.
Let's take a look at two examples:
Cobra uses the flat architecture. Go Cache uses the domain driven approach, at least it utilizes packages.
Mostly the flat architecture is used, when the Go programm is small and does just one thing. If the Go program becomes more complicated and does several things, I would suggest to use the domain driven hexagonal approach.
Getter
In Go it's unusual to use Get
before a getter.
You often just remove the Get
in a getter method so that you access it with .Thing()
.
Interface Names
Interface names are often defined with er
as suffix.
Like Reader
, Writer
, Closer
and so on...
CamelCase or snake_case?
In Go you normally write CamelCase
or how they call it MixedCaps
and not snake_case
like in Python for example.