{}const=>[]async()letfn</>var
РазработкаОбзорBackend

🛠 Как структурировать проект на Go (чтобы не было каши)

Как перестать складывать всё в main.go и сделать нормальную архитектуру на Go. Разбираем структуру папок, пакеты и best practices на примере реального проекта — просто, понятно и без лишней теории.

К

Кодик

Автор

2 мин чтения

💀 Как НЕ надо?

project/
  main.go
  user.go
  db.go
  utils.go
  service.go
  controller.go
  helper.go
  helper2.go

Это классика “я начал вчера и мне было норм”.

❌ Проблемы: — нет разделения ответственности — всё смешано — невозможно масштабировать

🔥 100 000+ учеников уже с нами

Устал читать теорию?
Пора кодить!

Кодик — приложение, где ты учишься программировать через практику. AI-наставник, интерактивные уроки, реальные проекты.

🤖 AI 24/7
🎓 Сертификаты
💰 Бесплатно
🚀 Начать учиться
Присоединились сегодня

🔥 Как надо (реальный пример)?

project/
  cmd/
    app/
      main.go

  internal/
    handler/
    service/
    repository/
    model/

  pkg/
    logger/
    utils/

  configs/
  go.mod

Вот это уже выглядит как проект, а не как папка “попробовать Go”.

📦 Разбираем по частям

1. cmd/ — точка входа

cmd/app/main.go

Тут только запуск приложения:

func main() {
  app := NewApp()
  app.Run()
}

👉 Никакой бизнес-логики. Только запуск.

2. internal/ — сердце проекта

Тут живёт всё важное:

  • handler — HTTP обработчики

  • service — бизнес-логика

  • repository — работа с БД

  • model — структуры данных

Пример потока:

HTTP → handler → service → repository → DB

💡 internal = нельзя импортировать снаружи (Go сам это контролирует)

3. pkg/ — переиспользуемые штуки

Если код можно вынести и использовать в другом проекте → сюда.

pkg/
  logger/
  utils/

Пример:

logger.Info("Server started")

4. configs/ — конфиги

.env, yaml, json — всё тут.

configs/
  config.yaml

🧠 Пример мини-проекта

Допустим, ты делаешь API пользователей:

internal/
  handler/user.go
  service/user.go
  repository/user.go
  model/user.go

Каждый слой делает только свою работу:

  • handler — принимает HTTP

  • service — думает

  • repository — ходит в БД

👉 Это называется разделение ответственности (и это реально спасает проекты)

⚡ Частые ошибки

  • пихать всё в main.go

  • смешивать бизнес-логику и HTTP

  • делать “utils.go на 2000 строк”

  • не использовать пакеты

Если узнал себя — всё нормально 😄 Через это проходят все.

🚀 Золотое правило

Если файл > 200 строк и делает всё подряд → его пора делить.

📱 Где это прокачать на практике?

Если хочешь реально вкатиться в такие вещи (а не просто читать статьи), лучше всего работает практика.

👉 В приложении Кодик ты как раз:

  • пишешь код руками

  • решаешь задачи

  • разбираешь реальные кейсы

Плюс есть телеграм-сообщество, где:

  • разборы

  • полезные посты

  • и регулярный буст по знаниям

💡 Это тот формат, где ты не просто читаешь — а начинаешь реально понимать.

💬 Итог

Структура проекта — это не “как красиво”, а “будет ли тебе больно через месяц”.

Сразу делай нормально:

  • разделяй слои

  • используй пакеты

  • не превращай код в свалку

И тогда твой Go-проект будет выглядеть как прод, а не как “первый опыт с YouTube” 😄


Напиши в комменты: как у тебя сейчас устроен проект? 😏 (честно, без прикрас)

🎯Хватит откладывать

Понравилась статья?
Пора применять на практике!

В Кодик ты не просто читаешь — ты сразу пишешь код. Теория + практика = реальный скилл.

Мгновенная практика
🧠AI объяснит код
🏆Сертификат

Без регистрации • Без карты