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.