💀 Как НЕ надо?
project/
main.go
user.go
db.go
utils.go
service.go
controller.go
helper.go
helper2.go
Это классика “я начал вчера и мне было норм”.
❌ Проблемы: — нет разделения ответственности — всё смешано — невозможно масштабировать
🔥 Как надо (реальный пример)?
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” 😄
Напиши в комменты: как у тебя сейчас устроен проект? 😏 (честно, без прикрас)
