Бесплатные материалы

Продвинутые дженерики в новых версиях Go

На этом открытом уроке за 1,5 часа мы разберем интерфейсы и дженерики в Go от «А» до «Я» — как они устроены под капотом, зачем нужны итераторы и как писать гибкий код без потери производительности.

В этом уроке:

  • Методы и ресиверы: в чем разница между Value и Pointer ресиверами, и как это влияет на копирование данных и память.
  • Интерфейсы под капотом: детальный разбор структур iface и eface, виртуальные таблицы методов и накладные расходы на динамический полиморфизм.
  • Дженерики (Type Parameters): как работают type sets, что такое comparable и почему Go генерирует отдельный код для каждого типа (мономорфизация).
  • Работа с коллекциями: нюансы работы с хэш-мапами, создание сетов и использование пакетов slices, maps и cmp.
  • Итераторы в Go 1.23: глубокое погружение в iter.Seq, разница между Push и Pull итераторами и как они упрощают обход сложных структур данных.
  • Анализ бинарников: смотрим, как дженерики влияют на размер исполняемого файла и скорость компиляции.

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

Дополнительные материалы к видео

Исходный код
https://github.com/IgorWalther/videos/tree/master/0011_generics
Типы значений (lvalue, xvalue, rvalue)
https://learn.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/cpp-value-categories
Мой курс по многопоточному программированию
https://igoroutine.courses/courses/concurrency_nature/?utm_source=site&utm_medium=post&utm_campaign=igoroutine&utm_content=tnogp_adv_generics
Доклад Highload про оптимизацию с помощью инлайна интерфейсов (и другого)
https://www.youtube.com/watch?v=QMC9Kg4Ogxg
Предыдущая часть про основы Go
https://t.me/igoroutine/89?comment=296
Интересная статья как дизайнить библиотеки в Go
https://abhinavg.net/2022/12/06/designing-go-libraries/
Собеседования