Назад к вопросам
СБЕР
Middle
3
Что такое Inversion of Control?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Inversion of Control (IoC) — это принцип проектирования, при котором управление созданием и связыванием объектов передаётся внешнему контейнеру или фреймворку, а не реализуется напрямую в коде.
Вместо того, чтобы объект сам создавал свои зависимости, они ему «внедряются» извне. Это повышает модульность, тестируемость и гибкость кода.
В Go IoC часто реализуется через передачу зависимостей через конструкторы или функции, а не через глобальные переменные или создание внутри функций.
Пример простого внедрения зависимостей в Go:
package main
import "fmt"
type Service interface {
Serve()
}
type MyService struct{}
func (s *MyService) Serve() {
fmt.Println("Service is serving")
}
// Consumer зависит от Service, но не создаёт его сам
func NewConsumer(s Service) *Consumer {
return &Consumer{service: s}
}
type Consumer struct {
service Service
}
func (c *Consumer) Do() {
c.service.Serve()
}
func main() {
service := &MyService{}
consumer := NewConsumer(service) // внедрение зависимости
consumer.Do()
}
Здесь Consumer не создаёт MyService самостоятельно, а получает его извне — это и есть IoC.