Можно ли писать на Go, соблюдая принципы SOLID

«Можно ли писать на Go, соблюдая принципы SOLID» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно. SOLID — это универсальные принципы, применимые и в Go, несмотря на его особенности (например, отсутствие классического ООП).

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

  2. Interface Segregation — маленькие интерфейсы (io.Reader, io.Writer — хорошие примеры).

  3. Dependency Inversion — зависимости через интерфейсы, а не конкретные типы.

    func ProcessData(reader io.Reader) { /* ... */ }

Go поощряет композицию и простоту, что хорошо сочетается с SOLID.