Junior — Middle
Czy możesz podzielić się swoim doświadczeniem w implementacji koncepcji Inversion of Control w projektach?
sobes.tech AI
Odpowiedź od AI
Implementacja Inversion of Control (IoC) w Go zazwyczaj osiąga się poprzez przekazywanie zależności do konstruktorów lub funkcji, a nie przez frameworki, jak w innych językach. Na przykład, zamiast tworzyć zależności wewnątrz struktury, przekazujemy je z zewnątrz, co ułatwia testowanie i zwiększa elastyczność.
Przykład:
// Interfejs dla loggera
type Logger interface {
Log(message string)
}
// Implementacja loggera
type ConsoleLogger struct {}
func (c *ConsoleLogger) Log(message string) {
fmt.Println(message)
}
// Serwis zależny od Loggera
type Service struct {
logger Logger
}
func NewService(logger Logger) *Service {
return &Service{logger: logger}
}
func (s *Service) DoWork() {
s.logger.Log("Praca wykonana")
}
// Użycie
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()
Takie podejście pozwala na łatwą zmianę implementacji zależności i upraszcza testy jednostkowe.