Sobes.tech
Junior — Middle

Можете ли да споделите опита си с внедряването на концепцията за Inversion of Control в проекти?

sobes.tech AI

Отговор от 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()

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