Sobes.tech
Junior — Middle

Puoi condividere la tua esperienza nell'implementazione del concetto di Inversion of Control nei progetti?

sobes.tech AI

Risposta dell'AI

L'implementazione dell'Inversion of Control (IoC) in Go si ottiene generalmente passando le dipendenze nei costruttori o nelle funzioni, piuttosto che tramite framework, come in altri linguaggi. Ad esempio, invece di creare le dipendenze all'interno della struttura, le passiamo dall'esterno, facilitando i test e aumentando la flessibilità.

Esempio:

// Interfaccia per il logger
 type Logger interface {
    Log(message string)
}

// Implementazione del logger
 type ConsoleLogger struct {}

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

// Servizio che dipende da Logger
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("Lavoro completato")
}

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

Questo approccio permette di cambiare facilmente le implementazioni delle dipendenze e semplifica i test unitari.