SOLID — пять принципов объектно-ориентированного дизайна, которые отлично ложатся на Go:
S — Single Responsibility: один пакет/структура = одна ответственность. O — Open/Closed: расширяй через интерфейсы, не меняй существующий код. L — Liskov Substitution: если функция принимает интерфейс, любая реализация должна корректно работать. I — Interface Segregation: маленькие интерфейсы по 1-2 метода (io.Reader, io.Writer) вместо монструозных. D — Dependency Inversion: зависимости на интерфейсах, а не на конкретных типах.
В Go принцип I особенно важен — маленькие интерфейсы в пакете-потребителе, а не в пакете-реализации. Это идиоматичный Go.