Ответ
Да, можно. SOLID — это универсальные принципы, применимые и в Go, несмотря на его особенности (например, отсутствие классического ООП).
- Single Responsibility — каждый тип/функция должна решать одну задачу.
type UserStore struct{} // Только работа с хранилищем
type UserService struct { store *UserStore } // Логика пользователей
- Open-Closed — расширяемость без модификации (используем интерфейсы).
type Logger interface { Log(string) }
type FileLogger struct{}
func (f FileLogger) Log(msg string) { /* ... */ }
-
Liskov Substitution — интерфейсы в Go имплементируются неявно, что упрощает соблюдение принципа.
-
Interface Segregation — маленькие интерфейсы (
io.Reader,io.Writer— хорошие примеры). -
Dependency Inversion — зависимости через интерфейсы, а не конкретные типы.
func ProcessData(reader io.Reader) { /* ... */ }
Go поощряет композицию и простоту, что хорошо сочетается с SOLID.