Справочники по Go
Язык, стандартная библиотека и практика сервиса на Go. Материал собран из спецификации языка, Effective Go, документации пакетов и release notes Go 1.20–1.27.
Версия языка — Go 1.27. В листах отмечено, с какой версии появилось поведение: per-iteration переменные цикла и range по целому — 1.22, range по функции — 1.23, generic type aliases — 1.24, new(expr) — 1.26, generic methods — 1.27. Где спецификация и release notes расходятся с распространённым мнением, приоритет у спецификации.
Язык
- Язык — пакеты и видимость, переменные и константы, zero values, базовые типы и преобразования, строки, байты и руны, массивы и срезы, мапы, структуры и методы, embedding, интерфейсы, дженерики, ошибки,
defer, замыкания и циклы,switch - Параллелизм — горутины, каналы,
select,sync,context, паттерны, data race и memory model - Рантайм — шедулер G-M-P, сборка мусора, escape analysis, стеки горутин,
pprofиtrace
Практика
- Стандартная библиотека —
net/http,encoding/json,ioиio/fs,os,time,log/slog,stringsиbytes,database/sql - HTTP-сервис — запрос → middleware → handler → service → repository → ответ, таймауты, graceful shutdown, ошибки как контракт, конфигурация
- SQL и Postgres —
database/sql,pgx, транзакции, индексы,EXPLAIN, NULL, миграции - Инструменты —
go modи workspace,go test, табличные тесты, fuzz, benchmark,vet,staticcheck,-race, delve,embed, cross-compile
Основы
- Архитектура — пакет как модуль, интерфейс на стороне потребителя, DI без фреймворка, слои и направление зависимостей, ошибки как контракт
- Примеры кода — сервис целиком в файлах: домен, хранилище, HTTP, конфигурация, тесты
Указатель
Указатель — одна страница, где собраны все сущности из справочников: типы, функции, методы, поля, флаги и термины. Со ссылками на место описания.
Клавиши
- Ctrl/Cmd+E — палитра переходов: страницы, разделы и сущности всех справочников.
- Ctrl/Cmd+Shift+P — палитра команд.
- / — поиск по странице; Enter — следующее совпадение, Shift+Enter — предыдущее; Esc — очистить.
- [ и ] — предыдущий и следующий раздел.
- j / k — скролл; g g — в начало, G — в конец.
- t — скрыть оглавление; n — скрыть навигацию; z — Zen-режим; y — ссылка на раздел.
Первоисточники
- The Go Programming Language Specification — нормативное описание языка
- Effective Go — идиомы и соглашения
- Go FAQ — типовые вопросы о типах, срезах, интерфейсах и GC
- Release notes Go 1.22 — переменные цикла и
rangeпо целому - Release notes Go 1.23 —
rangeпо функции, итераторы - Release notes Go 1.24 — generic type aliases
- Release notes Go 1.26 —
new(expr) - Release notes Go 1.27 — generic methods
- pkg.go.dev — документация стандартной библиотеки и модулей