Sobes.tech
Junior — Middle

Жоболордо Inversion of Control концепциясын ишке ашыру боюнча тажрыйбаңыз менен бөлүшө аласызбы?

sobes.tech AI

AIден жооп

Go тилинде Inversion of Control (IoC) көбүнчө көзкарандылыктарды куруучуларга же функцияларга өткөрүү аркылуу жеткирилет, башка тилдердегидей frameworkтер аркылуу эмес. Мисалы, структуранын ичинде көзкарандылыктарды түзүү ордуна, биз алардын сырттан өткөрүп жатабыз, бул тестирлөөнү жеңилдетет жана ийкемдүүлүктү арттырат.

Мисал:

// Логгер үчүн интерфейс
 type Logger interface {
    Log(message string)
}

// Логгердин ишке ашырылышы
 type ConsoleLogger struct {}

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

// Loggerга көзкаранды болгон кызмат
 type Service struct {
    logger Logger
}

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

func (s *Service) DoWork() {
    s.logger.Log("Жумуш аяктады")
}

// Колдонуу
logger := &ConsoleLogger{}
service := NewService(logger)
service.DoWork()

Бул ыкма көзкарандылыктарды оңой алмаштырууга жана бирдиктүү тестирлөөнү жеңилдетүүгө мүмкүндүк берет.