Sobes.tech
Junior — Middle

Ar galite pasidalinti savo patirtimi diegiant Inversion of Control koncepciją projektuose?

sobes.tech AI

Atsakymas iš AI

Inversion of Control (IoC) įgyvendinimas Go dažniausiai pasiekiamas perduodant priklausomybes per konstruktorius ar funkcijas, o ne naudojant karkasus, kaip kitose kalbose. Pavyzdžiui, vietoje to, kad sukurtume priklausomybes struktūros viduje, jas perduodame iš išorės, kas palengvina testavimą ir padidina lankstumą.

Pavyzdys:

// Logerio sąsaja
 type Logger interface {
    Log(message string)
}

// Logerio įgyvendinimas
 type ConsoleLogger struct {}

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

// Paslauga, priklausanti nuo Logger
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("Darbas atliktas")
}

// Naudojimas
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Šis požiūris leidžia lengvai keisti priklausomybių įgyvendinimus ir supaprastina vienetinius testus.