Ответ
Single Responsibility Principle (SRP)
Каждый модуль/класс должен иметь одну ответственность.
Пример:
type User struct { ... } // хранение данных
type UserDB struct { ... } // работа с БД
Open-Closed Principle (OCP)
Сущности должны быть открыты для расширения, но закрыты для изменений.
Пример: использование интерфейсов для добавления новых типов без модификации существующего кода.
Liskov Substitution Principle (LSP)
Подтипы должны быть заменяемы базовыми типами. В Go это соблюдается через интерфейсы.
Interface Segregation Principle (ISP)
Много специализированных интерфейсов лучше одного общего.
Пример:
type Reader interface { Read() }
type Writer interface { Write() }
Dependency Inversion Principle (DIP)
Зависимости должны строиться на абстракциях, а не на деталях.
Пример: внедрение зависимостей через интерфейсы.
SOLID улучшает читаемость, тестируемость и гибкость кода.