Intentional Code with Go
You don't have to be a software architect to find yourself architecting software.
Most developers stumble into architecture. One day you're writing a script, the next you're responsible for a system with users and consequences. Then the decisions start to pile up: where should this logic live, how should these parts talk to each other, and why did a small change suddenly become a whole afternoon?
This is a focused reference to the patterns and principles that help you answer those questions in idiomatic Go. If you're not sure where to start, read the Design Philosophy section first. It gives the rest of the catalog some shape. If you already know the pain but not the pattern name, the tags will get you there faster.
Featured
Place business logic at the centre, define ports (interfaces) for everything the application drives or is driven by, and provide adapters that connect the outside world to those ports.
Define an interface for creating an object, but let the calling code decide which concrete type to instantiate via constructor functions returning an interface.
Provide a simple, unified interface to a complex subsystem, shielding clients from internal complexity.