Типы и память Go

О теме

Слайсы, мапы, строки, интерфейсы — классика скрининга.

Лекции

Типы и память Go
Embedding структур и интерфейсов

Безымянное поле продвигает методы внутреннего типа наружу. Это сборка из частей, не наследование классов: подтипа «является» и виртуального override в Go нет.

Типы и память Go
Интерфейсы и nil

Интерфейс — это пара «какой тип внутри + само значение». Нильный указатель в интерфейсе не равен nil. Отсюда ложные if err != nil и паники на методах.

Типы и память Go
Строки, байты и руны

Строка в Go — неизменяемая последовательность байт в UTF-8. len считает байты, range отдаёт руны, а нарезка по индексу может разрезать букву пополам.

Типы и память Go
Мапы: хэш, comma-ok, concurrent write

Map в Go — хэш-таблица: ключ находится быстро, порядка обхода нет. Нулевая map паникует на записи. Конкурентная запись без блокировки — data race и часто падение процесса.

Типы и память Go
Слайсы: len, cap, append и шаринг массива

Срез — это окно на массив: указатель, длина и ёмкость. От этого зависят append, общие подсрезы и то, что видно снаружи после вызова функции.