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.