Слайсы, мапы, строки, интерфейсы — классика скрининга.
Лекции
Embedding структур и интерфейсов
Безымянное поле продвигает методы внутреннего типа наружу. Это сборка из частей, не наследование классов: подтипа «является» и виртуального override в Go нет.
Интерфейсы и nil
Интерфейс — это пара «какой тип внутри + само значение». Нильный указатель в интерфейсе не равен nil. Отсюда ложные if err != nil и паники на методах.
Строки, байты и руны
Строка в Go — неизменяемая последовательность байт в UTF-8. len считает байты, range отдаёт руны, а нарезка по индексу может разрезать букву пополам.
Мапы: хэш, comma-ok, concurrent write
Map в Go — хэш-таблица: ключ находится быстро, порядка обхода нет. Нулевая map паникует на записи. Конкурентная запись без блокировки — data race и часто падение процесса.
Слайсы: len, cap, append и шаринг массива
Срез — это окно на массив: указатель, длина и ёмкость. От этого зависят append, общие подсрезы и то, что видно снаружи после вызова функции.