Go

От первого go run до рабочего API

Уровень: Начальный · около 17 ч · после курса: Соберёшь три работающие программы по ходу курса, а в финале - HTTP API с базой, тестами и авторизацией

Чему научишься

  • Поднять HTTP-сервер на стандартной библиотеке net/http
  • Подключить PostgreSQL через database/sql и работать с пулом соединений
  • Написать табличные тесты и мокать зависимости через интерфейсы
  • Разложить код по пакетам и управлять областью видимости
  • Реализовать middleware для логирования, recover и CORS
  • Сделать graceful shutdown через context с отменой
  • Собрать проект в один бинарник и запустить его на сервере
  • Довести до работающего состояния три программы, не дожидаясь конца курса

Уроки курса (27)

Модуль 1 · Старт и синтаксис

Установить Go и освоить базовые конструкции языка

  1. Установка Go и первый запуск - Устанавливаем Go, настраиваем редактор с автодополнением и подсветкой ошибок, запускаем первую программу
  2. Переменные и типы: var, := и нулевые значения - Основы работы с данными в Go: переменные, константы и базовые типы
  3. if, switch и логика решений - Условные конструкции в Go: if, else, switch и особенности их использования
  4. Цикл for: все варианты + типичные ошибки - В Go есть только один цикл - for, но он может всё: от классического счетчика до бесконечного цикла

Модуль 2 · Функции и коллекции

Функции, слайсы, map и структуры - рабочие лошадки Go

  1. Функции и несколько возвращаемых значений - Функции в Go: параметры, возвращаемые значения, defer, замыкания и функции как first-class citizens
  2. Слайсы - динамические массивы Go - Слайсы в Go: создание, манипуляции, внутреннее устройство и производительность
  3. Maps - хеш-таблицы в Go - Maps в Go: создание, операции, конкурентность и практические примеры использования
  4. Структуры - создаем свои типы - Структуры в Go: создание, методы, встраивание, теги и best practices

Модуль 3 · Типы, ввод данных и ошибки

Ввод от пользователя, strconv, свои типы, интерфейсы и errors as values

  1. Получение данных от пользователя - Чтение ввода: fmt.Scan, bufio.Scanner, os.Args, пакет flag для CLI
  2. Преобразование типов и strconv - Явное приведение типов, strconv.Atoi, ParseFloat, FormatInt и работа со строками-числами
  3. Определяемые типы и инкапсуляция - type definition, type alias, методы на типах, инкапсуляция через пакеты
  4. Интерфейсы - контракты в Go - Интерфейсы в Go: неявная реализация, композиция, пустой интерфейс и практические паттерны
  5. Обработка ошибок как философия - Обработка ошибок в Go: error interface, паттерны, создание своих ошибок и best practices

Модуль 4 · Рекурсия, файлы и первая веха

Рекурсия, файлы, задачник в терминале - первая работающая программа, затем пакеты и окружение

  1. Рекурсия - Рекурсивные функции, базовый случай, стек вызовов, хвостовая рекурсия, когда не стоит
  2. Работа с файлами - Чтение и запись файлов в Go: os, bufio, io - от простых операций до потокового чтения больших файлов
  3. Веха 1: задачник в терминале - Первая законченная программа курса: флаги, команды, хранение в файле и атомарная запись
  4. Область видимости и пакеты - Scope переменных, блоки, shadowing, экспорт через регистр, организация пакетов
  5. Переменные среды и Go-модули - go env, GOPATH и GOROOT, приватные модули через GOPRIVATE, кеш зависимостей, линтеры и работа с go.mod

Модуль 5 · Конкурентность, сеть и вехи API

Горутины, каналы, HTTP-сервер, задачник по HTTP, PostgreSQL и тот же задачник с базой

  1. Горутины - легковесная конкурентность - Горутины в Go: создание, синхронизация, паттерны и типичные ошибки конкурентного программирования
  2. Каналы - связь между горутинами - Каналы в Go: создание, операции, буферизация, select и паттерны использования
  3. HTTP сервер из коробки - Создание веб-серверов в Go: http пакет, роутинг, middleware, работа с JSON и best practices
  4. Веха 2: тот же задачник по HTTP - REST API на стандартной библиотеке: ServeMux с методами, JSON, коды ответов и graceful shutdown
  5. Работа с базами данных - Подключение к БД в Go: database/sql, работа с PostgreSQL, миграции и best practices
  6. Веха 3: переносим задачи в PostgreSQL - Замена хранилища в памяти на базу: репозиторий, миграции, пул соединений и что при этом ломается

Модуль 6 · Тесты, context и финальный проект

Тестирование, управление временем жизни операций и TODO API с авторизацией

  1. Тестирование - встроено в язык - Тестирование в Go: unit тесты, table-driven tests, бенчмарки, моки и интеграционные тесты
  2. Context - управление временем жизни операций - Пакет context в Go: отмена операций, тайм-ауты, дедлайны и передача данных между горутинами
  3. Проект: TODO API с авторизацией - Создаем полноценное REST API приложение: структура проекта, JWT авторизация, база данных, тесты