Core Go#
Язык изнутри: типы и память под ними, слайсы, мапы, интерфейсы, ошибки, дженерики. Начни отсюда, если переходишь на Go с другого языка.
Оглавление#
Статьи идут в порядке чтения: от базы к деталям. Всего 15 статей.
- Система типов Go: defined types, alignment, memory layout — Система типов отвечает на два вопроса: какие значения можно присваивать друг другу и сколько байт они занимают.
- Указатели в Go — Указатель — это переменная, в которой лежит не само значение, а адрес другого значения.
- Внутреннее устройство слайсов в Go — Слайс — это не сам массив с данными, а карточка из трёх полей: где лежат данные, сколько элементов уже есть и сколько ещё влезет без переезда.
- Устройство map в Go —
map— это хеш-таблица: ключ прогоняется через хеш-функцию, полученное число указывает на «корзину», а в корзине лежит до восьми пар ключ-значение. - Строки, руны и байты в Go — Строка в Go — это пачка байт, а не последовательность символов.
- Интерфейсы в Go — Интерфейс в Go — это список методов, и тип подходит под него автоматически, если нужные методы у него есть.
- Встраивание структур и интерфейсов (Embedding) — Встраивание — это когда одна структура кладётся внутрь другой без имени поля, и её методы становятся доступны снаружи, будто они свои собственные.
- Ошибки в Go: error, wrapping, errors.Is/As/Join — В Go ошибка — это обычное значение, которое функция возвращает последним результатом, а не исключение, само летящее вверх по стеку.
- Механика defer в Go —
deferговорит: «выполни этот вызов, когда функция закончится — неважно, обычнымreturnили паникой». - panic / recover: механика, раскрутка стека и runtime-паники —
panic— это аварийная остановка: программа бросает текущую функцию и начинает разматывать стек вызовов вверх, выполняя по пути все отложенные черезdefer… - Замыкания и переменная цикла (Go 1.22) — Замыкание — это функция, которая «помнит» переменные того места, где была создана.
- Дженерики в Go (1.18+) — Дженерики позволяют написать функцию или тип один раз и использовать с разными типами данных, не теряя проверок компилятора.
- encoding/json и теги структур —
encoding/jsonпревращает структуры Go в JSON и обратно, а управляется это тегами — строчками в обратных кавычках рядом с полями. - Рефлексия в Go (reflect) — Рефлексия — способ во время выполнения узнать, что за тип тебе передали, перебрать его поля и прочитать теги, не зная этот тип заранее.
- Модули, версионирование и зависимости — Модуль — это проект целиком: каталог, в котором лежит
go.modсо списком того, что проекту нужно.