Go Master Course — От первой строчки до микросервисов | Stepik
from zero to microservices

Go Master Course

Полный путь от первой строчки кода до распределённой микросервисной архитектуры с gRPC, RabbitMQ, PostgreSQL, Redis, Prometheus и Grafana.

300+ видеоуроков · 50 часов · 261 тест · 3 реальных проекта

Записаться на курс Программа курса Финальный проект
300+
Видеоуроков
50+
Часов видео
261
Тестов
45
Задач
3
Проекта
14
Дней теории
10000+
Строк кода
12+
Технологий

Путь начинается здесь

Первый файл курса. Через 14 дней вы будете писать микросервисы

all/src/day01/ex01datatypes/main.go
package main

import "fmt"

func main() {
    // Day 01: first steps with Go types
    var name string = "Go Master Course"
    var days int = 14
    var ready bool = true

    fmt.Printf("Course: %s\n", name)
    fmt.Printf("Days: %d, Ready: %t\n", days, ready)
}

Почему Go?

Go создан в Google для масштабных систем. Простой синтаксис, молниеносная компиляция и встроенная конкурентность делают его идеальным для backend

Простота и скорость

Минимальный синтаксис, мгновенная компиляция в нативный бинарник. Нет классов, наследования, исключений — только то, что нужно

Встроенная конкурентность

Горутины и каналы — легковесные потоки из коробки. Тысячи конкурентных задач без боли

Стандартная библиотека

HTTP-сервер, JSON, криптография, тестирование — всё встроено. Минимум внешних зависимостей

Востребованность

Docker, Kubernetes, Terraform, Prometheus — вся cloud-инфраструктура написана на Go. Один из самых высокооплачиваемых языков

Идеален для микросервисов

Маленькие бинарники, мгновенный старт, низкое потребление памяти. Создан для контейнеров и облака

Generics (Go 1.18+)

Типобезопасное обобщённое программирование. Go стал ещё мощнее, не потеряв простоту

Для кого этот курс

Курс подходит как новичкам, так и разработчикам, переходящим на Go с других языков

Начинающим разработчикам

Курс начинается с абсолютных основ: типы данных, переменные, условия, циклы. Каждый день — новая тема с десятками упражнений

Переходящим с Python / JS / Java

Интенсивное погружение в Go-way: композиция вместо наследования, горутины вместо async/await, интерфейсы без implements

Тем, кто хочет в backend

От консольных утилит до распределённых микросервисов: REST API, gRPC, очереди сообщений, базы данных, мониторинг

Что вы освоите

Полный набор навыков для backend-разработчика на Go

01

Основы языка Go

Типы данных, переменные, условия, циклы, функции, коллекции — крепкий фундамент для всего остального

02

Структуры и интерфейсы

ООП на Go: композиция вместо наследования, полиморфизм через интерфейсы, generics (Go 1.18+)

03

Конкурентность

Горутины, каналы, WaitGroup, Mutex — настоящая параллельная обработка данных

04

SOLID и паттерны

5 принципов SOLID + Factory, Builder, Singleton, Adapter, Prototype, Functional Options

05

REST API и JWT

Gin framework, middleware, аутентификация, авторизация, валидация, SQL-базы данных

06

Микросервисы

gRPC, RabbitMQ, Redis, PostgreSQL, MySQL — распределённая архитектура с observability

Объём материала

Один из самых полных русскоязычных курсов по Go

300+
Видеоуроков
50+ часов
Видеоконтента
261
Тестов
45
Интерактивных задач
Фаза 1

Основы языка Go

14 дней интенсива, 86+ упражнений: от типов данных и переменных до конкурентности, SOLID и паттернов проектирования. Каждый день — новая тема с практическими заданиями

Day 01 Типы данных и переменные 9 упражнений
  • ex01Типы данных — int, float, bool, string, byte, rune
  • ex02Расширенные типы — signed/unsigned, complex, числовые типы
  • ex03Анатомия переменной — значение, тип, адрес, размер в памяти
  • ex04Хранение в памяти — адреса и размеры разных типов
  • ex05Идентификаторы — правила именования, Unicode, ключевые слова
  • ex06Naming conventions — camelCase, public/private, сокращения
  • ex07Комментарии — однострочные, многострочные, GoDoc
  • ex08Статическая типизация — фиксация типов, type inference
  • ex09Нулевые значения — zero values для всех типов
Day 02 Операторы и форматирование 5 упражнений
  • ex01Арифметические операции — +, -, *, /, %, битовые, инкремент
  • ex02Форматирование строк — Print, Println, Printf, Sprintf
  • ex03Числовое форматирование — ширина поля, выравнивание, точность
  • ex04Константы и iota — const, typed/untyped, iota-последовательности
  • ex05Tip Calculator — первый практический мини-проект
Day 03 Math, типы и пользовательский ввод 9 упражнений
  • ex01Пакет math — округление, степени, корни, тригонометрия
  • ex02Type alias — создание псевдонимов и отдельных типов
  • ex03Приведение типов — explicit conversion, потеря точности, overflow
  • ex04Ввод: fmt.Scanln — базовый ввод пользователя
  • ex05Ввод: fmt.Scanf — форматированный ввод с разделителями
  • ex06Tip Calculator v2 — интерактивный калькулятор с валидацией
  • ex07Бонус — дополнительная практика ввода/вычислений
  • ex08Сравнение Scan* — Scan vs Scanln vs Scanf
  • ex09bufio.Scanner — чтение полных строк с пробелами
Day 04 Условная логика 6 упражнений
  • ex01Сравнение — ==, !=, <, >, <=, >=
  • ex02Логические операторы — &&, ||, !, short-circuit
  • ex03if / else — ветвления, вложенные условия, цепочки
  • ex04if с инициализацией — объявление переменных прямо в if
  • ex05Tip Calculator v3 — обработка ошибок и буферизованный I/O
  • ex06switch — case matching, fallthrough, без break
Day 05 Циклы и случайные числа 5 упражнений
  • ex01math/rand — генерация чисел, бросок кубика, диапазоны
  • ex02crypto/rand — криптографическая случайность
  • ex03Классический for — init; condition; post, вложенные циклы
  • ex04for как while — цикл с условием, обратный отсчёт
  • ex05for-range — итерация по строкам, rune, index/value
Day 06 Коллекции: массивы, слайсы, строки 10 упражнений
  • ex01Массивы — фиксированный размер, инициализация
  • ex022D-массивы — крестики-нолики, таблица умножения
  • ex03Слайсы — динамические массивы, pointer/len/cap, make()
  • ex04Операции со слайсами — генерация, фильтрация, реверс
  • ex05Строки: основы — UTF-8, raw strings, внутреннее устройство
  • ex06Строковые операции — поиск, сравнение, пакет strings
  • ex07Паттерны строк — конвертации int/float/string
  • ex08Quiz-приложение — массив вопросов, подсчёт баллов
  • ex09Password Validator — upper/lower, цифры, спецсимволы
  • ex10Шифр Цезаря — ротация алфавита, Unicode, регистр
Day 07 Maps и функции 7 упражнений
  • ex01Maps — создание, доступ, nil vs empty, итерация
  • ex02Set через map — map[T]struct{}, объединение, пересечение
  • ex03Библиотека — система управления книгами: слайсы + maps
  • ex04Введение в функции — рефакторинг, DRY-принцип
  • ex05Основы функций — параметры, возвраты, variadic, рекурсия
  • ex06Продвинутые функции — by value vs pointer, defer
  • ex07Panic и recover — паника, размотка стека, восстановление
Day 08 Файлы и время 4 упражнения
  • ex00Основы файлов — создание, запись, форматирование данных
  • ex02Пакет time — текущее время, timestamps, форматирование
  • ex03Файловые операции — открытие, чтение, запись, буферизация
  • ex04Библиотека + файлы — персистенция, 3-layer architecture
Day 09 Структуры и JSON 4 упражнения
  • ex01Введение в struct — определение, поля, методы-ресиверы
  • ex02Struct с методами — доступ к полям, определение поведения
  • ex03Вложенные структуры — embedding, организация данных
  • ex04Контакты + JSON — struct tags, Marshal/Unmarshal
Day 10 ООП: композиция, интерфейсы, generics 12 упражнений
  • ex01Композиция — embedding структур, продвижение методов
  • ex03Видимость — exported vs unexported, инкапсуляция
  • ex04Методы — value vs pointer receivers, method sets
  • ex05Введение в интерфейсы — контракты, множественные реализации
  • ex06Имплементация — неявное удовлетворение, полиморфизм
  • ex07Type assertion — определение типа, type switch
  • ex09interface{} — пустой интерфейс, any
  • ex10nil interface — подводные камни nil-интерфейсов
  • ex11Generics: основы — типовые параметры, constraints
  • ex12Generics: продвинутые — generic collections, map-reduce
Day 11 Практический проект: Contact Book капстоун

Первый полноценный проект — применяем всё изученное за 10 дней. Консольное приложение с доменной моделью, JSON-хранилищем, CLI-меню и валидацией.
25 уроков пошаговой разработки

Day 12 Конкурентность: горутины и каналы 10 упражнений
  • ex01Горутины: основы — запуск конкурентных функций
  • ex02Стек горутин — стеки и порядок выполнения
  • ex03Каналы: основы — отправка/получение, синхронизация
  • ex04Буферизованные каналы — ёмкость, неблокирующие операции
  • ex05Ошибки в горутинах — Result struct, проброс ошибок
  • ex07WaitGroup — Add/Done/Wait, синхронизация группы
  • ex08Mutex — защита shared data, data race
  • ex09Concurrent Fetcher — параллельные HTTP-запросы
  • ex10Deadlock — сценарии взаимоблокировки
Day 13 SOLID и паттерны проектирования 11 упражнений

SOLID Principles

  • SRPSingle Responsibility — одна структура, одна ответственность
  • OCPOpen/Closed — расширение без изменения
  • LSPLiskov Substitution — корректная подстановка
  • ISPInterface Segregation — тонкие интерфейсы
  • DIPDependency Inversion — зависимость от абстракций

Design Patterns

  • 01Simple Factory — порождающий: создание с валидацией
  • 02Functional Options — идиоматический Go: гибкая конфигурация
  • 03Builder — пошаговое построение сложных объектов
  • 04Prototype — клонирование объектов
  • 05Singleton — единственный экземпляр (sync.Once)
  • 06Adapter — совместимость несовместимых интерфейсов
Day 14 Управление зависимостями go modules
  • ex01Go Modules — go.mod, go.sum, go get, go mod tidy
  • ex02Внешние пакеты — pkg.go.dev, импорт и использование
  • ex03Создание библиотек — публикация своего модуля
Фаза 2

Contact Book CLI

Первый полноценный проект: консольная телефонная книга с иерархическими связями, тегами и JSON-хранилищем. 25 уроков пошаговой разработки, где применяется всё изученное за первые 10 дней

ContactBook — консольное приложение

Полнофункциональная система управления контактами с поддержкой множественных телефонов и email, тегов для поиска, заметок и связей между контактами (семья, коллеги, друзья). Данные атомарно сохраняются в JSON. Каскадное удаление связей.

  go-contact-book/
  |-- cmd/contactbook/
  |   |-- main.go              // точка входа, инициализация
  |   +-- data/
  |       |-- contacts.json    // персистентные данные
  |       +-- seed.json        // демо-данные
  |
  +-- internal/
      |-- app/
      |   +-- app.go           // Application struct, DI
      |-- cli/
      |   |-- cli.go           // CLI-контроллер
      |   |-- handlers.go      // обработчики команд
      |   +-- menu.go          // интерактивное меню
      |-- domain/
      |   |-- contact.go       // модель Contact
      |   |-- contactbook.go   // бизнес-логика: CRUD, поиск
      |   +-- errors.go        // доменные ошибки
      +-- storage/
          |-- storage.go       // интерфейс Storage
          +-- json_storage.go  // JSON + atomic write

Возможности

> CRUD контактов (Create, Read, Update, Delete)
> Множественные телефоны и email
> Теги для категоризации и поиска
> Связи между контактами
> Поиск по имени, телефону, тегам
> Каскадное удаление связей
> Атомарная запись в JSON

Применённые концепции

> Структуры и методы
> Слайсы и Maps
> Файловый I/O и JSON
> Интерфейсы и полиморфизм
> Обработка ошибок
> Domain-Driven Design
> Repository Pattern
Go JSON Storage CLI Menu Domain-Driven Design Repository Pattern CRUD Atomic Writes
Фаза 3

Contacts REST API

Переход от CLI к Web. Полноценный RESTful API с JWT-аутентификацией, owner-based авторизацией, SQLite и чистой архитектурой. 29 уроков разработки

Contacts API — полноценный REST-сервис

Переписываем Contact Book как Web API: Gin framework, SQLite база данных, JWT токены для аутентификации, middleware для авторизации, валидация данных через go-playground/validator, soft delete, 7 эндпоинтов.

  go-contacts-app/
  |-- cmd/
  |   +-- main.go                 // HTTP-сервер на Gin
  +-- internal/
      |-- contacts/
      |   |-- model.go            // Contact struct + tags
      |   |-- repository.go       // SQLite CRUD
      |   |-- service.go          // бизнес-логика
      |   +-- handler.go          // HTTP-обработчики
      |-- auth/
      |   |-- model.go            // User struct
      |   |-- repository.go       // users table
      |   |-- service.go          // register + login
      |   |-- handler.go          // auth endpoints
      |   +-- jwt.go              // JWT service (HS256)
      +-- middleware/
          +-- auth.go             // Bearer token middleware

Эндпоинты

POST /auth/register
POST /auth/login
GET  /contacts
GET  /contacts/:id
POST /contacts
PUT  /contacts/:id
DEL  /contacts/:id

Технологии

> Gin HTTP Framework
> JWT (HS256) аутентификация
> SQLite + database/sql
> bcrypt хеширование паролей
> go-playground/validator
> godotenv конфигурация
> Owner-based авторизация
Go Gin JWT SQLite REST API bcrypt Middleware Soft Delete Clean Architecture
Фаза 4 — Финал

Marketplace Microservices

Финальный проект: распределённая e-commerce платформа из 4 микросервисов. gRPC, RabbitMQ, Redis, PostgreSQL, MySQL, Prometheus, Grafana, Docker

4
Микросервиса
Go 1.25
Язык
6,056
Строк кода
74
Go-файлов
15
Docker-сервисов
REST API (HTTP)
gRPC (sync)
RabbitMQ (async)
PostgreSQL
MySQL
Redis
Application Services
📦

Catalog Service

REST API — Gin Framework
:9001
GET /api/v1/catalog-items
GET /api/v1/brands
GET /api/v1/categories
CRUD operations
🛒

Basket Service

REST API — Gin Framework
:9002
GET /cart POST /cart
POST /cart/checkout
→ gRPC → Promotion
→ Publish → RabbitMQ
🏷️

Promotion Service

gRPC Server
:9003 gRPC
GetPromoByCatalogItem
CreatePromo
UpdatePromo
DeletePromo
💳

Checkout Service

REST API — Gin Framework
:9004
GET /orders/{id}
GET /orders/account/{name}
← Consume ← RabbitMQ
Communication Layer

gRPC

Basket → Promotion
Sync, Protobuf
🐰

RabbitMQ

Basket → Checkout
Async, JSON events
Data Layer
🐘

catalog-db

PostgreSQL 18.1
🐘

basket-db

PostgreSQL 18.1

basket-cache

Redis 7
🐬

promotion-db

MySQL 8.0
🐘

checkout-db

PostgreSQL 18.1
Observability & Operations
🔥

Prometheus

Metrics :9090
📊

Grafana

Dashboards :3000
📈

k6

Load testing
🐳

Portainer

Management :9000

Synchronous: gRPC

Basket Service вызывает Promotion Service через gRPC для получения скидок. Синхронный вызов при каждом запросе корзины. Protobuf / HTTP/2.

🛒 Basket
gRPC
🏷️ Promotion

🐰 Asynchronous: RabbitMQ

При checkout Basket публикует OrderSubmittedEvent. Checkout асинхронно потребляет событие и создаёт заказ. QoS: 1, Manual ACK.

🛒 Basket
AMQP
🐰 RabbitMQ
consume
💳 Checkout
Architecture Patterns
🏗️ Clean Architecture

Handler → Service → Repository. Чёткое разделение слоёв с инверсией зависимостей

📨 CQRS

Checkout Service: запись через RabbitMQ consumer, чтение через REST API

📡 Event-Driven

Асинхронная коммуникация между сервисами через события в RabbitMQ

🗄️ Repository Pattern

Абстракция доступа к данным. Каждый сервис владеет своей БД

💉 Dependency Injection

Конструкторная инъекция. Все зависимости передаются явно

🔄 Retry & Resilience

Reconnect к RabbitMQ и БД. Graceful shutdown с контекстами

🐳 Multi-stage Builds

Dockerfile: builder (Go compile) → scratch (minimal image)

🔗 Multi-layer Caching

Redis → PostgreSQL. TTL-based invalidation для корзин

Go gRPC RabbitMQ PostgreSQL MySQL Redis Protobuf Prometheus Grafana Docker CQRS Clean Architecture k6 Load Testing

Конспекты и справочник

Подробная текстовая документация к каждому дню курса: теория, примеры, задачи. Используйте как справочник параллельно с видео или для повторения

Типы и переменные

int, float, bool, string, byte, rune, scope, memory, zero values, naming

Выражения и константы

Арифметика, побитовые операции, fmt, форматирование, const, iota

Условия и логика

if/else, comparison, logical ops, short-circuit, switch, init-in-if

Циклы

for, while-pattern, range, break/continue, PRNG, crypto/rand

Массивы

Declaration, 2D-arrays, boundaries, iteration, copying, practical tasks

Слайсы

make, len/cap, nil vs empty, append, copy, multi-dimensional

Строки

UTF-8, runes, concatenation, conversion, escape, strings.Builder

Указатели и ввод

Pointers, stack/heap, scope, bufio.Scanner, input methods

Коллекции

Maps, sets, make, delete, comma ok, ordered iteration

Функции

Parameters, returns, variadic, closures, higher-order, recursion

Ошибки

error interface, errors.Is, wrap, panic, defer, recover, re-panic

Файлы и время

os, bufio, io, time.Now, formatting, parsing, Duration

Эволюция стека технологий

От fmt.Println до distributed systems — как растёт ваш инструментарий

Фаза 1: Основы

  • Go stdlib
  • fmt, math, time
  • os, bufio, io
  • encoding/json
  • math/rand, crypto/rand
  • sync (Mutex, WaitGroup)

Фаза 2: CLI

  • JSON file storage
  • Domain-Driven Design
  • Repository pattern
  • CLI interface
  • Atomic file writes
  • Error handling patterns

Фаза 3: Web API

  • Gin framework
  • JWT (HS256) auth
  • SQLite + SQL
  • bcrypt hashing
  • Middleware chain
  • Input validation
  • Soft delete
  • godotenv config

Фаза 4: Микросервисы

  • gRPC / Protobuf
  • RabbitMQ (AMQP)
  • PostgreSQL + MySQL
  • Redis caching
  • Prometheus + Grafana
  • CQRS, DDD, Clean Arch
  • Docker / Portainer
  • k6 load testing
  • 74 Go files, 6000+ LOC

Путь обучения

Четыре фазы с нарастающей сложностью. Каждая фаза строится на предыдущей

Фаза 1 — Основы

14 дней, 86+ упражнений
Типы, переменные, условия, циклы, коллекции, функции, структуры, интерфейсы, конкурентность, SOLID, паттерны

Фаза 2 — CLI

Contact Book (25 уроков)
Консольное приложение с JSON-хранилищем, доменной моделью, связями, поиском и тегами

Фаза 3 — Web API

Contacts REST API (29 уроков)
Gin, JWT, SQLite, CRUD, middleware, авторизация, валидация, 7 эндпоинтов

Фаза 4 — Микросервисы

Marketplace (6000+ LOC)
4 сервиса, gRPC, RabbitMQ, PostgreSQL, MySQL, Redis, Prometheus, Grafana, Docker

Готовы начать путь в Go?

Присоединяйтесь к курсу и пройдите путь от первой строчки кода до production-ready микросервисов.

Записаться на курс