Menu
CoddyTech
Путь обучения

Структуры данных и алгоритмы на Go

Go даёт слайсы и map, а остальное оставляет на вас: нет типов для стека, очереди или множества, а куча в container/heap ничего не делает, пока вы не реализуете heap.Interface. На этом пути вы пишете каждую структуру на Go со структурами и указателями, затем с их помощью сортируете, применяете рекурсию и обходите графы, а завершаете задачами с собеседований, проверяемыми тестами. Бесплатно, в браузере, с сертификатом за большинство курсов.

377 уроков284 задачи702 вопросов квиза

DSA на Go, шаг за шагом

38 курсов377 уроков284 задачи702 вопросов квиза

Каждый шаг состоит из уже существующих курсов Coddy, и каждая кнопка «Начать» открывает их на Go. Три курса, которых пока нет на Go, перечислены после шагов.

  1. 1
    Начать этот шагНачатьСтек, очередь, двоичное дерево, хеш-таблица и связный список: каждую структуру вы пишете на Go с нуля, а затем применяете для решения задач. После этого шага слайс в роли стека и map в роли множества становятся решениями, которые вы можете обосновать, а тип очереди, которого нет в Go, вы уже написали сами.Начать
  2. 2
    Начать этот шагНачатьДвусвязный список, кучи и очереди с приоритетом, префиксные деревья, графы и самобалансирующееся АВЛ-дерево. Первая из этих структур, container/list, уже есть в готовом виде; после этого шага пять методов heap.Interface обретают смысл, потому что вы сами написали кучу, а сбалансированное дерево, которого в Go так и не появилось, вы можете построить.Начать
  3. 3
    Начать этот шагНачатьПузырьковая, выбором, вставками, слиянием, быстрая, пирамидальная, подсчётом и поразрядная сортировки: вы пишете их на Go и наблюдаете в визуализаторе. Начиная с Go 1.19 sort.Slice использует pattern-defeating quicksort, и slices.Sort тоже его использует, причём ни одна из них не сортирует устойчиво, поэтому и существует sort.SliceStable; после этого шага вы понимаете, что означает каждое из этих слов.Начать
  4. 4
    Начать этот шагНачатьЗадачи на рекурсию на Go, где стеки горутин начинаются с малого размера и растут по мере необходимости, поэтому рекурсия глубиной в тысячи вызовов редко переполняет стек. Пропущенный базовый случай всё равно упирается в потолок, по умолчанию 1 ГБ стека в 64-битных системах, и заканчивается фатальной ошибкой, а не медленной программой. Динамическое программирование и битовые операции перечислены после шагов, так как они преподаются на Python и C++.НачатьСвоя страница
  5. 5
    Начать этот шагНачатьПоиск в ширину и в глубину, Дейкстра, Беллман-Форд, топологическая сортировка, Крускал и Прим на Go, поверх графа, который вы построили на втором шаге. В алгоритме Дейкстры роль очереди с приоритетом в Go играет container/heap поверх слайса вашего собственного типа: куча со второго шага, скрытая за интерфейсом.Начать
  6. 6
    Начать этот шагНачатьДесять наборов задач с собеседований и два банка задач по программированию на Go с проверкой по тестам: незнакомые задачи, решение без туториалов, со слайсами, map и структурами, которые вы построили по пути.Начать
Что вы получаете
Всё, что вам нужно, чтобы научиться программировать

Учитесь на практике

Пишите реальный код, работайте с базами данных, создавайте сайты и осваивайте ИИ-промпты. Наши интерактивные уроки охватывают все навыки, необходимые современным разработчикам.

playground.js
Редактор кода
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Тест №1test Case Success icon
Тест №2test Case Success icon
Тест №3test Case Failure icon
Ввод
"Alex"
Вывод
"Hello, Coddy! Alex"

Создайте свою серию

Будьте последовательны и наблюдайте за своим прогрессом! Отслеживайте ежедневную привычку программирования, защищайте свою серию с помощью дней заморозки и получайте награды за каждый день.

12 дней подряд

Возвращайтесь завтра, чтобы сохранить серию!

fire Filled icon
left icon

January 2026

right icon

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

21

22

23

24

25

26

27

28

29

30

product Double Or Nothing icon

Всё или ничего

День 5 из 7

fire Freeze icon

Заморозка серии

2 left

Код где угодно

Возьмите свое путешествие по программированию с собой! Без настройки, без загрузок - просто откройте и начните программировать. Доступно на iOS, Android и Web с рейтингом 4.9 звезд.

Python
7Серия
250Очки
5Энергия
Переменные
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
ПРОДОЛЖИТЬ
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Путь
Цели
Таблица лидеров
Профиль
4.9
ЗвездаЗвездаЗвездаЗвездаЗвезда
Рейтинг

Вы не одиноки

Соревнуйтесь в глобальных рейтингах, приглашайте друзей, чтобы получать награды, и празднуйте успехи друг друга. Программировать веселее с друзьями!

Лига Претендентов
Лига ПретендентовТоп 7 продвигаются
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconЗона продвиженияleaderboard Arrow Up icon

Учитесь как угодно

Читайте, слушайте, проверяйте себя, спрашивайте у ИИ или ищите то, что уже изучили. Каждый урок подстраивается под вас.

Введение в переменные
Аудио

Переменная - это именованный контейнер, который хранит значение для последующего использования.

В Python вы создаёте её, написав имя, знак равенства и значение, которое нужно сохранить.

Значение может меняться - переприсваивание просто направляет имя на новое значение.

1xSarah

Ваш сертификат

Получайте сертификаты за каждый завершенный курс. Добавьте их в свой профиль LinkedIn и резюме, чтобы продемонстрировать работодателям свои навыки программирования.

CoddyСертификат о прохождении
Настоящим подтверждается, чтоИван Ивановуспешно завершил(а)
python iconОсновы Python
Подтверждено
Датаянв. 2026
LinkedInДобавить в LinkedIn

Почему учить DSA на Go с Coddy

  • Структуры, которые Go оставляет вам. Встроены в Go только слайсы и map, и на этом всё: стек представляет собой слайс, в который вы добавляете через append и который укорачиваете новым срезом, множество записывается как map[T]struct{}, а типа очереди или дерева нет вовсе. Умение написать недостающие структуры и знание стоимости каждой операции со слайсом входят в знание Go.
  • Структуры и указатели, ничего скрытого. В Go нет классов: узел представляет собой struct с указателем на следующий, а методы привязаны к типу. Связный список или дерево выглядят ровно тем, чем являются, дженерики (начиная с Go 1.18) позволяют переиспользовать их для любого типа элементов, а благодаря сборщику мусора не нужно управлять malloc и free.
  • Почти весь путь на Go. Все структуры данных, сортировки, алгоритмы на графах, задачи на рекурсию и наборы задач с собеседований преподаются на Go. Три курса преподаются на других языках и перечислены после шагов, у каждого своя ссылка: динамическое программирование и серия по интервью на Python (Python), а также битовые операции (C++). Битовые операции естественно читаются с позиции Go: в нём есть &, |, ^, << и >> из C++, а NOT записывается как ^x.
  • Проверка как на собеседовании. Каждый урок заканчивается задачей на Go с автопроверкой по тестам, а когда решение не проходит, Bugsy читает ваш код и подталкивает к исправлению, не выдавая ответ. Бесплатный сертификат за большинство курсов, каждый с проверкой по собственной ссылке.

Частые вопросы о DSA на Go

Подходит ли Go для структур данных и алгоритмов?

Да. Он компилируется в быстрый нативный код, его синтаксис настолько компактен, что при чтении вы видите в основном сам алгоритм, а дженерики (начиная с Go 1.18) позволяют переиспользовать типизированный стек или кучу. Обратная сторона в скромной стандартной библиотеке: помимо слайсов, map, container/list и container/heap структуры вы пишете сами, а на учебном пути в этом и смысл. К тому же на Go работает значительная часть современной облачной инфраструктуры, включая Docker и Kubernetes, поэтому он естественный язык собеседований на бэкенд-роли.

Какие типы и пакеты Go каким структурам данных соответствуют?

Слайс представляет собой динамический массив, а с append и повторными срезами он же служит вам стеком; map является хеш-таблицей, и идиоматичным множеством считается map[T]struct{}; container/list реализует двусвязный список; а container/heap поддерживает двоичную кучу поверх любого типа, реализующего heap.Interface. Типа очереди, дерева, префиксного дерева или графа нет, так что их вы пишете сами, на первом и втором шагах.

Как работает container/heap в Go?

Вы реализуете heap.Interface на собственном типе слайса: Len, Less и Swap из sort.Interface, а также Push и Pop, которые лишь добавляют элемент в конец слайса и удаляют его оттуда. Затем вы вызываете функции пакета heap.Push и heap.Pop, а не собственные методы, и они выполняют просеивание вверх и вниз, которое поддерживает порядок. Это выглядит странно, пока вы сами не напишете кучу, а это вы делаете на втором шаге.

Почему при обходе map в Go каждый раз получается другой порядок?

Потому что Go намеренно делает порядок обхода map случайным, чтобы ни одна программа не начала от него зависеть. У хеш-таблицы нет осмысленного порядка ни в одном языке; Go просто следит за тем, чтобы вы это заметили. Когда порядок важен, например в выводе, который сравнивает тест, соберите ключи в слайс и отсортируйте его или храните слайс рядом с map.

Какие курсы этого пути не преподаются на Go?

Три: динамическое программирование и серия по интервью на Python преподаются на Python, а битовые операции на C++. Они перечислены после шагов, каждый со ссылкой, которая открывает курс на его собственном языке. Таблица мемоизации в Go представляет собой слайс или map, а ещё в Go есть битовый оператор, которого нет в C++: &^, AND NOT, который сбрасывает в левом операнде все биты, установленные в правом.

Нужно ли знать Go, прежде чем начинать этот путь?

Как минимум структуры, указатели, слайсы, map и методы; дженерики пригодятся, и их можно освоить по ходу. Если это для вас новое, курс Go от Coddy сначала бесплатно доведёт вас до этого уровня, а этот путь начинается там, где он заканчивается.

Другие пути обучения

Те же курсы, выстроенные под другую роль. Прогресс сохраняется: курс, пройденный на одном пути, засчитывается на каждом пути, куда он входит.

Все пути обучения
Иллюстрация языков программирования Coddy

Начните путь Структуры и алгоритмы бесплатно

Начать учиться