← Все навыки

Структуры данных в Go

Как устроены slices, maps, strings под капотом и как реализовать классические структуры данных на Go

Встроенные типы Классические структуры Индивидуально с ментором

Автор курса — о том, как всё устроено (1 мин)

Для кого этот навык

  • Go-разработчики, которые хотят понимать внутреннее устройство встроенных типов
  • Разработчики, переходящие на Go с другого языка
  • Все, кто готовится к собеседованию и хочет уверенно отвечать про slices, maps и memory

Программа

Arrays и Slices

Внутреннее устройство, append, copy, memory leaks
  • Slice header: pointer, length, capacity
  • append: когда происходит реаллокация и как это влияет на производительность
  • Memory leaks при работе со срезами срезов

Maps

Хеш-таблицы в Go, порядок итерации, concurrent map
  • Устройство map: buckets, overflow, grow
  • Рандомизированный порядок итерации — почему и зачем
  • sync.Map vs map + Mutex: когда что выбирать

Strings и Runes

UTF-8, работа с юникодом, byte vs rune
  • Строки как immutable byte slices
  • Rune: что это и зачем нужен для работы с юникодом
  • strings.Builder для эффективной конкатенации

Linked Lists, Stacks, Queues

Реализация классических структур на Go
  • container/list из стандартной библиотеки vs своя реализация
  • Стек и очередь на основе slice
  • Generics в Go 1.18+: типизированные структуры данных

Trees и Graphs

Обходы, поиск, практические задачи
  • Binary tree: реализация, обходы (in-order, pre-order, post-order)
  • BST: вставка, удаление, поиск
  • Графы: BFS, DFS на Go с использованием каналов и горутин

Практика: Event Store

Реализация хранилища событий с нуля на Go

  • Хранилище событий с фильтрацией по типу, временной метке и диапазону ID
  • Реализация стеков, очередей и деревьев на Go с использованием generics
  • Код-ревью и разбор решений с ментором