раздел 22
Go
Минимализм синтаксиса, горутины, каналы. Серверный язык без лишнего бойлерплейта.
Начать раздел
Хочу пройти
Не получилось изменить список. Попробуй ещё раз.
Без входа у каждого урока видно начало. Войди, чтобы читать целиком, отмечать пройденное и решать задачи. войти
Уроки раздела в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Оплата пока не подключена, доступ открывается промокодом. ввести промокод
Уроки раздела
- Старт: Tour of Go, toolchain, первый репозиторий
- Языки и рантайм: где Go и как живёт программа
- Память Go: значимые и "ссылочные" типы, передача параметров
- Строки в Go: байты, руны, функции, билдер
- Ввод и форматирование: fmt, bufio, strconv
- Отладка кода: delve, VS Code и грязный print
- Функции: вызов, multi-return, замыкания
- Структуры, методы, iota: ООП по-Go-вски
- Воркшоп: моделирование школы, дробей и магазина
- Указатели в Go: основы, функции, структуры
- Интерфейсы: основы, any, type assertion, embedding, nil
- Ошибки: error, defer, panic, обёртывание, Is/As/Join
- Generics: ограничения, обобщённые структуры, стек
- Заключительный урок junior-трека: чек-лист и куда дальше
- Воркшоп: Weather CLI на cobra
- Идиоматика Go и stdlib
- Внутреннее устройство string, slice, map, channel
- Concurrency глубоко: GMP, sync, atomics, race
- Runtime, GC, escape analysis, pprof, generics
- Сборник: вопросы с собеседований Go $10k+
- HTTP-сервисы на net/http
- Persistence: database/sql, pgx и миграции
- Сериализация и сжатие: JSON, gob, gzip
- Event-driven Go: Watermill, Kafka и async-обработка
- Тесты, бенчмарки, моки и testcontainers
- gRPC, protobuf, Buf и connect-go
- Миграции, sqlc, squirrel: типизированный SQL без ORM
- Архитектура pet-проекта: hex без фанатизма, Mat Ryer, DI
- Паттерны concurrency: pipelines, fan-in/out, errgroup, singleflight
Понятия курса
Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.
Старт
- Tour of Go и code-basicsБаза синтаксиса, типы, функции, структуры. Уровень входа в курс.урок 1 · Старт: Tour of Go, toolchain, первый репозиторий
Основы языка
- Ввод и форматирование: fmt, bufio, strconvГлаголы форматирования fmt, чтение stdin через bufio.Scanner, разбор и печать чисел через strconv.урок 5 · Ввод и форматирование: fmt, bufio, strconv
- Значимые и ссылочные типы, передача параметровВ Go всё передаётся по значению. Что копируется целиком, а что прячет указатель внутри: слайс, map, channel.урок 3 · Память Go: значимые и "ссылочные" типы, передача параметров
- Отладка: delve, VS Code и печать в консольТри уровня отладки: аккуратная печать, delve в терминале, дебаггер в редакторе. Условные breakpoint, отладка тестов и горутин.урок 6 · Отладка кода: delve, VS Code и грязный print
- Строки: байты, руны, strings.Builderstring это неизменяемая пара указателя и длины. Байт не равен символу, поэтому есть руны. Сложение строк в цикле квадратично.урок 4 · Строки в Go: байты, руны, функции, билдер
- Функции: multi-return, variadic, замыканияИдиома (value, error), named returns, вариативные параметры, функции как значения и замыкания.урок 7 · Функции: вызов, multi-return, замыкания
- Языки и рантайм: где стоит GoКомпиляция, интерпретация, байт-код и JIT: куда в этой классификации попадает Go. Что лежит в памяти запущенной программы и что делает go run.урок 2 · Языки и рантайм: где Go и как живёт программа
Типы и абстракции
- Воркшоп: моделирование школы, дроби и магазинаТри задачи на типы: агрегат с дочерними коллекциями, value object с арифметикой, набор взаимодействующих сущностей.урок 9 · Воркшоп: моделирование школы, дробей и магазина
- Интерфейсы: any, type assertion, embeddingНеявная реализация, каноничные интерфейсы stdlib, any и type switch, встраивание интерфейсов, ловушка с nil.урок 11 · Интерфейсы: основы, any, type assertion, embedding, nil
- Итоги junior-трека и куда дальшеЧек-лист для самопроверки, карта пройденного и переход к остальной части раздела: идиоматика, concurrency, тесты, HTTP.урок 14 · Заключительный урок junior-трека: чек-лист и куда дальше
- Ошибки: error, defer, panic, Is/As/Joinerror это обычный интерфейс. Свои типы ошибок, defer и порядок LIFO, panic и recover, обёртывание через %w.урок 12 · Ошибки: error, defer, panic, обёртывание, Is/As/Join
- Структуры, методы, iotastruct как набор полей, методы с value и pointer receiver, композиция вместо наследования, перечисления через iota.урок 8 · Структуры, методы, iota: ООП по-Go-вски
- Указатели: адрес, разыменование, nilКак указатель ведёт себя в функциях и структурах, чем опасен nil, чем отличаются new, make и составной литерал.урок 10 · Указатели в Go: основы, функции, структуры
- Generics: type parameters и ограниченияПараметры типов, ограничения comparable и cmp.Ordered, обобщённые структуры, пакеты slices и maps, случаи когда дженерики лишние.урок 13 · Generics: ограничения, обобщённые структуры, стек
Идиоматика и stdlib
- Структура Go-проектаДиректория = пакет. Когда нужен internal/, когда cmd/, почему pkg/ обычно лишний. golang-standards/project-layout это не стандарт.урок 1 · Старт: Tour of Go, toolchain, первый репозиторий
- flag vs cobraКогда хватает stdlib flag, а когда нужны subcommand-ы и completion (cobra). Иллюстрация Go Proverb a little copying is better than a little dependency.тема без урока
- Сериализация и сжатие: JSON, gob, gzipCustom MarshalJSON/UnmarshalJSON, json.Decoder для стримов, encoding/xml, encoding/gob. compress/gzip middleware для HTTP-ответов с sync.Pool.тема без урока
- Copy semantics, value vs pointerВсё в Go передаётся по значению. Что копируется, что не стоит копировать. Pointer vs value receiver и правило согласованности.тема без урока
- Effective Go и Code Review CommentsКанон стиля от Go-team: имена, форматирование, контрольные структуры, методы и интерфейсы.тема без урока
- encoding/json и struct tagsMarshal/Unmarshal, Decoder/Encoder для стримов. Теги json:"...", omitempty, DisallowUnknownFields. Подводные камни: float64 для чисел, time.Time в RFC3339.тема без урока
- errors: wrapping, Is/As, sentinel и custom типыfmt.Errorf с %w, errors.Is/As/Join. Три стратегии: sentinel errors, custom error types, opaque errors.тема без урока
- Go ProverbsТезисы Роба Пайка, к которым возвращаешься годами. Don't communicate by sharing memory; accept interfaces, return structs; errors are values.тема без урока
- io.Reader/Writer, bufioУниверсальный интерфейс потоков. Принимать io.Reader, не *os.File. bufio.Scanner для построчного чтения.тема без урока
- log/slog: structured loggingСтруктурированные логи в stdlib (Go 1.21+). JSON в проде, текст в dev. Сразу учить slog, не старый log.тема без урока
- time: Duration, Location, monotonic clockСравнение через t.Equal, не ==. Reference time 2006-01-02. time.LoadLocation для таймзон. Тестируемое время через инъекцию time.Now.тема без урока
Concurrency
- context: cancellation, deadlines, valuesПервый параметр любого I/O. Прокидывается насквозь. Cancellation, timeout, request-scoped values.тема без урока
- Goroutines, channels, selectДешёвые потоки рантайма Go. Channel как способ коммуникации. select как способ ждать на нескольких каналах.тема без урока
- sync: Mutex, RWMutex, WaitGroup, OnceКогда mutex полезнее канала. sync/atomic для счётчиков. Когда без shared memory не обойтись.тема без урока
- Книга: Concurrency in GoKatherine Cox-Buday. Каноническое изложение паттернов: pipelines, fan-in/out, error propagation, rate limiting.тема без урока
Тестирование
- testify, mockery, gomockassert/require для читаемых проверок, suite для общего setup. Mock-генерация: mockery (по интерфейсам), gomock (uber/golang).тема без урока
- testing: table-driven, subtests, t.ParallelСтандартный testing закрывает 80% задач. Table-driven как идиома. Subtests через t.Run. t.Parallel для независимых.тема без урока
- Benchmarks и pprofgo test -bench, b.ReportAllocs, профили cpu/heap/block через net/http/pprof и runtime/pprof.тема без урока
- testcontainers-go: интеграционные тесты с реальной БДПоднять Postgres/Redis/Kafka в Docker на время теста. Без mock-переборов.тема без урока
HTTP и RPC
- net/http и ServeMux 1.22После 1.22 у ServeMux появился routing с методами и path-параметрами. Потом для контраста chi или echo.тема без урока
- gRPC: межсервисное общениеProtobuf-схема, code generation, streaming. Между сервисами в микросервисном проекте берём gRPC, на edge остаётся HTTP/JSON.тема без урока
- Middleware, graceful shutdown, structured loggingЦепочка middleware на чистых функциях. Server.Shutdown с сигналами. Логирование через slog.тема без урока
Persistence
- Миграции: goose и golang-migrateSQL-миграции версиями. Goose ближе к стилю Rails, golang-migrate более минималистичный.тема без урока
- database/sql и pgxСтандартный интерфейс плюс драйвер. Для Postgres pgx как нативный драйвер с прямым доступом к фичам.тема без урока
- sqlc и squirrelsqlc генерирует типизированные функции из SQL, идиоматичный go-way. squirrel это query builder. ORM (gorm) показать, но не использовать.тема без урока
События и async
- Watermill: pub/sub, CQRS и outboxPublisher/Subscriber, Ack/Nack, Router, EventBus/EventProcessor, transactional outbox, идемпотентность. Для Kafka/RabbitMQ/NATS/Redis Streams через единый интерфейс.тема без урока
Архитектура pet project
- DI: руками, wire, fxСначала ручной DI через конструкторы. Потом wire (Google, codegen) и fx (Uber, рантайм-граф). Понять, когда оно нужно.тема без урока
- Hexagonal/Clean без фанатизмаДоменное ядро, порты и адаптеры. Структура по доменам, а не по слоям. Без избыточных интерфейсов.тема без урока
- Mat Ryer: How I write HTTP servicesСвежая (2024) версия канонического доклада. Готовая структура, по которой собирается реальный сервис.тема без урока
Воркшопы
- Воркшоп: Weather CLI на cobraПервая практика после Tour of Go: утилита погоды на cobra. ДЗ с диаграммами, Gherkin-сценариями и заглядыванием в gRPC.тема без урока
Подготовка к собеседованиям
- Внутреннее устройство string, slice, map, channelЗаголовки string и slice, growth strategy, Swiss Tables в map (Go 1.24), внутреннее устройство канала и шесть аксиом.тема без урока
- Сборник: вопросы с собеседований Go $10k+Чеклист реальных вопросов: soft, Go-структура, concurrency, runtime, БД, брокеры, Linux, k8s, observability. Алгоритм live-coding.тема без урока
- Concurrency глубоко: GMP, sync, atomics, raceGMP-модель, work stealing, netpoller, async preemption. Mutex/RWMutex/Atomic/Channel когда что брать. Race condition vs data race.тема без урока
- Runtime, GC, escape analysis, pprof, genericsStack vs heap, escape analysis по -gcflags="-m". Tri-color mark-and-sweep, GOGC и GOMEMLIMIT. CPU/heap profiling через pprof. Generics и обзор Go 1.18 -> 1.25.тема без урока