Sobes.tech
Назад к вопросам
Junior — Middle
76

Можешь поделиться своим опытом внедрения концепции Inversion of Control в проектах?

Компании, где спрашивали
Zonatelecom

Ответ от нейросети

sobes.tech AI

Внедрение Inversion of Control (IoC) в Go обычно достигается через передачу зависимостей в конструкторы или функции, а не через фреймворки, как в других языках. Например, вместо создания зависимостей внутри структуры, мы передаём их извне, что облегчает тестирование и повышает гибкость.

Пример:

// Интерфейс для логгера
 type Logger interface {
    Log(message string)
}

// Реализация логгера
 type ConsoleLogger struct {}

func (c *ConsoleLogger) Log(message string) {
    fmt.Println(message)
}

// Сервис, который зависит от Logger
 type Service struct {
    logger Logger
}

func NewService(logger Logger) *Service {
    return &Service{logger: logger}
}

func (s *Service) DoWork() {
    s.logger.Log("Работа выполнена")
}

// Использование
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Такой подход позволяет легко менять реализации зависимостей и упрощает модульное тестирование.