TGViewer
Всё о разработке | Леонид Ченский Всё о разработке | Леонид Ченский @leoscode · 732 subscribers
Post #59 727
3. Неявное внедрение зависимостей (Dependency Injection)

Этот шаблон позволяет легко управлять зависимостями между компонентами, повышая модульность и упрощая тестирование.

Пример:
type Database interface {
Query(query string) string
}

type Deps atruct {
Database
// other interfaces...
}

type Service struct {
Deps
}

func NewService(deps Deps) *Service {
return &Service{Deps: deps}
}

func (s *Service) GetData() string {
return s.Database.Query("SELECT * FROM data")
}

type MySQL struct{}

func (db MySQL) Query(query string) string {
return "MySQL query result"
}

func main() {
service := NewService(Deps{
Database: MySQL{}
})

fmt.Println(service.GetData())
}

За счет гибкого расширения структуры зависимостей, не приходится менять API конструктора NewService, следовательно сохраняется обратная совместимость и не требуется редактировать старые тесты.

Эти шаблоны помогают мне писать гибкий, легко поддерживаемый код, который можно адаптировать под различные нужды проекта.

А какие шаблоны используете вы? Делитесь своими любимыми в комментариях!
⬇️⬇️⬇️

#golang #шаблоны
  • 🔥 12
  • 👍 4
  • ❤ 2
  • 🤩 1
More from @leoscode
  1. Sep 15, 2026Помню как в детстве хотел такого же ассистента как Jarvis у Железного человека. Сейчас буд…
  2. Aug 24, 2026Гипотетическая история Представьте завтра все датацентры «вдруг» перестанут работать. Прив…
  3. Aug 4, 2026"Капризный день"
  4. Jul 17, 2026Пользуюсь случаем, напишу тут: ищу заряжененного Go разработчика к себе в команду. Ссылка…
  5. Jul 14, 2026Утро вторника началось не с кофе… Кто положил, признавайтесь!)
  6. Jul 1, 2026Согласны? 👍 Да 🗿Нет
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →