Go
От первого go run до рабочего API
Уровень: Начальный · около 17 ч · после курса: Соберёшь три работающие программы по ходу курса, а в финале - HTTP API с базой, тестами и авторизацией
Чему научишься
- Поднять HTTP-сервер на стандартной библиотеке net/http
- Подключить PostgreSQL через database/sql и работать с пулом соединений
- Написать табличные тесты и мокать зависимости через интерфейсы
- Разложить код по пакетам и управлять областью видимости
- Реализовать middleware для логирования, recover и CORS
- Сделать graceful shutdown через context с отменой
- Собрать проект в один бинарник и запустить его на сервере
- Довести до работающего состояния три программы, не дожидаясь конца курса
Уроки курса (27)
Модуль 1 · Старт и синтаксис
Установить Go и освоить базовые конструкции языка
- Установка Go и первый запуск - Устанавливаем Go, настраиваем редактор с автодополнением и подсветкой ошибок, запускаем первую программу
- Переменные и типы: var, := и нулевые значения - Основы работы с данными в Go: переменные, константы и базовые типы
- if, switch и логика решений - Условные конструкции в Go: if, else, switch и особенности их использования
- Цикл for: все варианты + типичные ошибки - В Go есть только один цикл - for, но он может всё: от классического счетчика до бесконечного цикла
Модуль 2 · Функции и коллекции
Функции, слайсы, map и структуры - рабочие лошадки Go
- Функции и несколько возвращаемых значений - Функции в Go: параметры, возвращаемые значения, defer, замыкания и функции как first-class citizens
- Слайсы - динамические массивы Go - Слайсы в Go: создание, манипуляции, внутреннее устройство и производительность
- Maps - хеш-таблицы в Go - Maps в Go: создание, операции, конкурентность и практические примеры использования
- Структуры - создаем свои типы - Структуры в Go: создание, методы, встраивание, теги и best practices
Модуль 3 · Типы, ввод данных и ошибки
Ввод от пользователя, strconv, свои типы, интерфейсы и errors as values
- Получение данных от пользователя - Чтение ввода: fmt.Scan, bufio.Scanner, os.Args, пакет flag для CLI
- Преобразование типов и strconv - Явное приведение типов, strconv.Atoi, ParseFloat, FormatInt и работа со строками-числами
- Определяемые типы и инкапсуляция - type definition, type alias, методы на типах, инкапсуляция через пакеты
- Интерфейсы - контракты в Go - Интерфейсы в Go: неявная реализация, композиция, пустой интерфейс и практические паттерны
- Обработка ошибок как философия - Обработка ошибок в Go: error interface, паттерны, создание своих ошибок и best practices
Модуль 4 · Рекурсия, файлы и первая веха
Рекурсия, файлы, задачник в терминале - первая работающая программа, затем пакеты и окружение
- Рекурсия - Рекурсивные функции, базовый случай, стек вызовов, хвостовая рекурсия, когда не стоит
- Работа с файлами - Чтение и запись файлов в Go: os, bufio, io - от простых операций до потокового чтения больших файлов
- Веха 1: задачник в терминале - Первая законченная программа курса: флаги, команды, хранение в файле и атомарная запись
- Область видимости и пакеты - Scope переменных, блоки, shadowing, экспорт через регистр, организация пакетов
- Переменные среды и Go-модули - go env, GOPATH и GOROOT, приватные модули через GOPRIVATE, кеш зависимостей, линтеры и работа с go.mod
Модуль 5 · Конкурентность, сеть и вехи API
Горутины, каналы, HTTP-сервер, задачник по HTTP, PostgreSQL и тот же задачник с базой
- Горутины - легковесная конкурентность - Горутины в Go: создание, синхронизация, паттерны и типичные ошибки конкурентного программирования
- Каналы - связь между горутинами - Каналы в Go: создание, операции, буферизация, select и паттерны использования
- HTTP сервер из коробки - Создание веб-серверов в Go: http пакет, роутинг, middleware, работа с JSON и best practices
- Веха 2: тот же задачник по HTTP - REST API на стандартной библиотеке: ServeMux с методами, JSON, коды ответов и graceful shutdown
- Работа с базами данных - Подключение к БД в Go: database/sql, работа с PostgreSQL, миграции и best practices
- Веха 3: переносим задачи в PostgreSQL - Замена хранилища в памяти на базу: репозиторий, миграции, пул соединений и что при этом ломается
Модуль 6 · Тесты, context и финальный проект
Тестирование, управление временем жизни операций и TODO API с авторизацией
- Тестирование - встроено в язык - Тестирование в Go: unit тесты, table-driven tests, бенчмарки, моки и интеграционные тесты
- Context - управление временем жизни операций - Пакет context в Go: отмена операций, тайм-ауты, дедлайны и передача данных между горутинами
- Проект: TODO API с авторизацией - Создаем полноценное REST API приложение: структура проекта, JWT авторизация, база данных, тесты