Назад к статьям

Чистая архитектура в Go: от теории к практике

Как применить принципы Clean Architecture в Go-проекте и не превратить код в Java-подобный boilerplate.

Проблема

Многие разработчики, переходя на Go, тащат с собой паттерны из Java или C#. В результате получается overengineered код. Go — это про простоту.

Моя интерпретация

project/
├── cmd/server/main.go
├── internal/
│   ├── handler/     // HTTP handlers
│   ├── service/     // Business logic
│   ├── repository/  // Data access
│   └── model/       // Domain models
├── pkg/             // Reusable packages
└── migrations/

Ключевые принципы

Dependency Injection через конструкторы — никаких DI-контейнеров.

Интерфейсы на стороне потребителя — определяйте интерфейс там, где он используется.

Минимум абстракций — если функция используется в одном месте, не нужен интерфейс.

type PostCreator interface {
    Create(ctx context.Context, post *model.Post) error
}

type Handler struct {
    posts PostCreator
}

Похожие статьи

Go · Architecture · API

Проектирование высоконагруженных API на Go

Разбираем архитектурные паттерны и подходы к созданию API, способного обрабатывать миллионы запросов.

Go · gRPC · REST · API

gRPC vs REST: когда что использовать

Практическое сравнение gRPC и REST API с бенчмарками, плюсами и минусами.