Локальное веб-приложение для изучения языка Go с теорией, примерами кода и практическими заданиями с автопроверкой.
- 📚 124 урока — от базового Go до продвинутых backend-тем
- 🎯 586 практических заданий с автоматической проверкой
- 📊 Отслеживание прогресса — очки и статистика
- 📝 Личные заметки к каждому уроку
- 🔍 Полнотекстовый поиск по всем материалам
- 💻 Встроенный редактор кода с подсветкой синтаксиса
- 🧩 Раздел «Проекты» — 2 capstone-проекта с развёрнутым ТЗ и ссылками на уроки
- Go 1.22 или выше
# Клонируйте репозиторий
git clone https://github.com/your-username/go-learning.git
cd go-learning
# Установите зависимости
go mod download
# Запустите сервер
go run ./cmd/server --db ./data.db --addr :8080Откройте http://localhost:8080 в браузере.
Примечание: База данных
data.dbуже содержит все уроки и задания — дополнительная настройка не требуется!
| Глава | Темы |
|---|---|
| Введение | Что такое Go, первая программа |
| Основы языка | Переменные, типы, операторы, циклы, условия |
| Функции | Параметры, возврат значений, замыкания, рекурсия |
| Указатели | Работа с адресами памяти |
| Производные типы | Структуры, методы, срезы, карты |
| Пакеты и модули | Организация кода, зависимости |
| Интерфейсы | Полиморфизм в Go |
| Горутины и каналы | Параллельное программирование |
| Обработка ошибок | error, panic, recover, defer |
| Файлы и I/O | Чтение, запись, потоки |
| Сеть | TCP, HTTP клиент/сервер |
| Базы данных | SQL, MySQL, PostgreSQL, SQLite, MongoDB |
| Тестирование | Unit/Integration/HTTP тесты, бенчмарки, покрытие |
| Generics | Constraints, структуры данных, паттерны |
| Context | Timeouts, отмена, values, best practices |
| Глава | Темы |
|---|---|
| Основы веб | HTTP сервер, маршрутизация, gorilla/mux |
| Шаблоны | html/template, синтаксис |
| Работа с БД | CRUD операции через веб-интерфейс |
| Глава | Темы |
|---|---|
| Архитектура | Clean Architecture |
| Gin Framework | REST API, middleware, валидация |
| JWT | access/refresh, безопасность |
| GORM | модели, связи, preload |
| Docker | multi-stage, compose, best practices |
| CI/CD | GitHub Actions, lint, -race |
| gRPC | proto, streaming, interceptors |
| Observability | Prometheus метрики |
| Производительность | pprof, trace, нагрузочное тестирование |
| Логирование | log/slog, request_id, корреляция |
| Tracing | OpenTelemetry (Gin/gRPC) |
| Production ready | таймауты, health/readiness, graceful shutdown |
| Redis | cache-aside, TTL, stampede |
| Postgres/SQL | миграции, пул, транзакции, EXPLAIN |
| gRPC Production | TLS/mTLS, grpc-gateway + OpenAPI |
Доступны на странице: /projects
Тексты ТЗ хранятся в lessons_mdx/Проекты/*.md (этот каталог не импортируется как курс).
go-learning/
├── cmd/
│ ├── server/ # Веб-сервер
│ ├── ingest/ # CLI для импорта контента
│ └── purge_demo/ # CLI для удаления демо-уроков из БД
├── internal/
│ ├── db/ # SQLite, миграции
│ ├── content/ # Модели и репозиторий уроков
│ ├── ingest/ # Парсер markdown
│ ├── practice/ # Проверка кода (go run/test)
│ ├── progress/ # Прогресс пользователя
│ └── web/ # HTTP handlers, шаблоны, статика
├── lessons_ai/ # Исходные markdown файлы уроков
├── lessons_mdx/ # Основной контент уроков в MDX (для ingest --mdx)
│ └── Проекты/ # ТЗ capstone-проектов (Markdown)
├── data.db # SQLite база с уроками и заданиями
├── project_specs.go # go:embed ТЗ из lessons_mdx/Проекты для страницы /projects
└── README.md
| Метод | Путь | Описание |
|---|---|---|
| GET | / |
Главная (список уроков) |
| GET | /lessons/{slug} |
Страница урока |
| GET | /projects |
Проекты (capstone ТЗ) |
| GET | /search?q= |
Поиск |
| POST | /api/progress/lesson/{id} |
Обновить прогресс |
| POST | /api/notes/lesson/{id} |
Сохранить заметку |
| POST | /api/run |
Выполнить Go-код |
| POST | /api/check |
Проверить решение задачи |
# Импортировать все уроки из lessons_mdx (рекомендуется)
go run ./cmd/ingest --db ./data.db --dir ./lessons_mdx --mdx
# Импортировать демо-данные (для разработки)
go run ./cmd/ingest --db ./data.db --demo
# Удалить демо-уроки из базы (если случайно добавили)
go run ./cmd/purge_demo --db ./data.db# Linux/macOS
rm -f data.db
# Windows (PowerShell)
Remove-Item -Force .\\data.db
# Пересоздать базу из lessons_mdx
go run ./cmd/ingest --db ./data.db --dir ./lessons_mdx --mdxКаждое задание включает:
- Описание — что нужно сделать (1-3 предложения)
- Ожидаемый результат — точный вывод программы
- Критерии приёмки — что проверяется (2-5 пунктов)
- Подсказки — без готового решения (макс. 2)
- Стартовый код — шаблон для решения
Проверка выполняется автоматически:
- Компиляция кода
- Проверка обязательных паттернов
- Сравнение вывода с ожидаемым
MIT — свободно для личного и коммерческого использования.
Сделано с ❤️ для изучения Go