Sobes.tech
Junior — Middle

Megosztaná tapasztalatait az Inversion of Control koncepció bevezetéséről projektekben?

sobes.tech MI

Válasz az MI-től

Az Inversion of Control (IoC) Go-ban általában a függőségek konstruktorok vagy függvények közötti átadásával valósul meg, nem pedig keretrendszerek segítségével, mint más nyelvekben. Például ahelyett, hogy a struktúrában belül hoznánk létre függőségeket, kívülről adjuk át őket, ami megkönnyíti a tesztelést és növeli a rugalmasságot.

Példa:

// Interfész a loggerhez
 type Logger interface {
    Log(message string)
}

// Logger megvalósítása
 type ConsoleLogger struct {}

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

// Szolgáltatás, amely a Logger-től függ
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("Munka kész")
}

// Használat
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Ez a megközelítés lehetővé teszi a függőségek könnyű cseréjét és megkönnyíti az egységtesztelést.