раздел 22

Go

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

29 уроков48 тем · 12 кластеров

Начать раздел
Хочу пройти

Без входа у каждого урока видно начало. Войди, чтобы читать целиком, отмечать пройденное и решать задачи. войти

Уроки раздела в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Оплата пока не подключена, доступ открывается промокодом. ввести промокод

Уроки раздела

  1. Старт: Tour of Go, toolchain, первый репозиторийJ~45 минпремиум
  2. Языки и рантайм: где Go и как живёт программаJ~45 минпремиум
  3. Память Go: значимые и "ссылочные" типы, передача параметровJ~55 минпремиум
  4. Строки в Go: байты, руны, функции, билдерJ~60 минпремиум
  5. Ввод и форматирование: fmt, bufio, strconvJ~60 минпремиум
  6. Отладка кода: delve, VS Code и грязный printJ~50 минпремиум
  7. Функции: вызов, multi-return, замыканияJ~55 минпремиум
  8. Структуры, методы, iota: ООП по-Go-вскиJ~60 минпремиум
  9. Воркшоп: моделирование школы, дробей и магазинаJ~70 минпремиум
  10. Указатели в Go: основы, функции, структурыJ~55 минпремиум
  11. Интерфейсы: основы, any, type assertion, embedding, nilJ~70 минпремиум
  12. Ошибки: error, defer, panic, обёртывание, Is/As/JoinJ~70 минпремиум
  13. Generics: ограничения, обобщённые структуры, стекM~60 минпремиум
  14. Заключительный урок junior-трека: чек-лист и куда дальшеJ~35 минпремиум
  15. Воркшоп: Weather CLI на cobraJ~35 минпремиум
  16. Идиоматика Go и stdlibM~60 минпремиум
  17. Внутреннее устройство string, slice, map, channelMS~45 минпремиум
  18. Concurrency глубоко: GMP, sync, atomics, raceMS~55 минпремиум
  19. Runtime, GC, escape analysis, pprof, genericsMS~50 минпремиум
  20. Сборник: вопросы с собеседований Go $10k+MS~55 минпремиум
  21. HTTP-сервисы на net/httpM~55 минпремиум
  22. Persistence: database/sql, pgx и миграцииM~50 минпремиум
  23. Сериализация и сжатие: JSON, gob, gzipM~35 минпремиум
  24. Event-driven Go: Watermill, Kafka и async-обработкаMS~40 минпремиум
  25. Тесты, бенчмарки, моки и testcontainersM~50 минпремиум
  26. gRPC, protobuf, Buf и connect-goMS~50 минпремиум
  27. Миграции, sqlc, squirrel: типизированный SQL без ORMM~40 минпремиум
  28. Архитектура pet-проекта: hex без фанатизма, Mat Ryer, DIMS~45 минпремиум
  29. Паттерны concurrency: pipelines, fan-in/out, errgroup, singleflightMS~55 минпремиум

Понятия курса

Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.

Старт

Основы языка

Типы и абстракции

Идиоматика и 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.тема без урока