Core Go#

Язык изнутри: типы и память под ними, слайсы, мапы, интерфейсы, ошибки, дженерики. Начни отсюда, если переходишь на Go с другого языка.

Оглавление#

Статьи идут в порядке чтения: от базы к деталям. Всего 15 статей.

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