Sobes.tech
Back to questions
Middle
4

Что такое Inversion of Control?

Companies where asked
СБЕРСБЕР

Answer from AI

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.