Назад к вопросам
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()
Такой подход позволяет легко менять реализации зависимостей и упрощает модульное тестирование.