В этом уроке:
Автор видео начинает с разграничения классического поведенческого паттерна Iterator и подхода, который используется в Golang. Если в ООП-мирах итератор — это объект с методами вроде HasNext/Next, то в Go упор делается на простые протоколы обхода и функции как источники значений, что сокращает накладные расходы и упрощает чтение кода.
Затем обсуждаются итераторы, характерные именно для Golang: "pull"-итераторы (потребитель запрашивает следующий элемент, чаще всего как Next () (T, bool)) и "push"-итераторы (производитель «толкает» значения в переданную колбэк-функцию). Поясняется, как выбрать модель под задачу: «pull» удобен для пошагового чтения и досрочного завершения, «push» — для конвейеров и трансформаций. Автор отдельно разбирает обработку ошибок и паник во время обхода: где уместен второй возвращаемый результат error, когда логичнее прерывать итерацию, и как безопасно использовать defer/recover.
Отдельный блок — новшества экосистемы вокруг Go: рассматривается пакет iter и то, как он формализует общие шаблоны итерации; показывается, что для стандартных коллекций (slices, maps) появляются удобные вспомогательные итераторы. Акцент — на читаемости и предсказуемости сигнатур, единых naming-conventions и совместимости с уже привычным for … range.
Практическая часть урока насыщенная, потому что автор:
Урок будет особенно полезен, если ты:
Для просмотра урока необходимо минимальное знание базовых коллекций Golang, ошибок (error), defer/recover, умение читать простые бенчмарки.
- 00:00 — Введение
- 01:16 — Особенности и нюансы итераторов в Go
- 03:21 — Поведенческий паттерн итератор
- 07:56 — Итераторы в Go
- 15:48 — Пакет iter в Go
- 21:12 — Итераторы в пакетах slices и maps
- 22:21 — Бенчмарки с итераторами
- 23:53 — Связный список с итераторами
- 26:00 — Naming conventions для итераторов
- 27:16 — Бинарные деревья с итераторами
- 29:37 — Сканер с итератором
- 31:33 — Пагинация на итераторах
- 34:50 — Функциональное программирование с итераторами
- 39:37 — Пайплайны на итераторах
- 44:22 — Трансформации с итераторами
- 45:48 — Итераторы для вычисления чисел фибоначчи
- 47:19 — Push и pull итераторы
- 51:31 — Обработка ошибок во время итерации
- 54:55 — Паники во время итерации
- 01:02:23 — Внутреннее устройство push итераторов
- 01:04:51 — Внутреннее устройство pull итераторов
Автор видео начинает с разграничения классического поведенческого паттерна Iterator и подхода, который используется в Golang. Если в ООП-мирах итератор — это объект с методами вроде HasNext/Next, то в Go упор делается на простые протоколы обхода и функции как источники значений, что сокращает накладные расходы и упрощает чтение кода.
Затем обсуждаются итераторы, характерные именно для Golang: "pull"-итераторы (потребитель запрашивает следующий элемент, чаще всего как Next () (T, bool)) и "push"-итераторы (производитель «толкает» значения в переданную колбэк-функцию). Поясняется, как выбрать модель под задачу: «pull» удобен для пошагового чтения и досрочного завершения, «push» — для конвейеров и трансформаций. Автор отдельно разбирает обработку ошибок и паник во время обхода: где уместен второй возвращаемый результат error, когда логичнее прерывать итерацию, и как безопасно использовать defer/recover.
Отдельный блок — новшества экосистемы вокруг Go: рассматривается пакет iter и то, как он формализует общие шаблоны итерации; показывается, что для стандартных коллекций (slices, maps) появляются удобные вспомогательные итераторы. Акцент — на читаемости и предсказуемости сигнатур, единых naming-conventions и совместимости с уже привычным for … range.
Практическая часть урока насыщенная, потому что автор:
- проводит бенчмарки, сравнивая циклы, каналы и разные виды итераторов;
- демонстрирует, как построить итераторы для связанных списков и бинарных деревьев, как сделать итератор-сканер и организовать пагинацию постраничной выборки из внешнего источника.
Урок будет особенно полезен, если ты:
- junior-разработчик, уже уверенно пишешь for … range, но хочешь понять, когда нужны «функции-итераторы», чем они отличаются от каналов и как не наделать лишних аллокаций.
- middle-разработчик, который упирается в производительность: где каналы избыточны, как проектировать Next () (T, bool)/func (yield func (T) bool)-подходы, как замерять и выбирать вариант по бенчмаркам.
- разработчик, пришедший из ООП-языков (Java/C#): тебе будет полезно переосмыслить классический паттерн Iterator на «гошный» лад и понять идиоматичные сигнатуры вместо HasNext/Next.
- backeng-инженер и автор сервисов с потоковой обработкой, кому нужны конвейеры (pipelines), ленивые преобразования, ограничение памяти и аккуратная остановка по условию/ошибке.
Для просмотра урока необходимо минимальное знание базовых коллекций Golang, ошибок (error), defer/recover, умение читать простые бенчмарки.