Выбор ответа Senior Дженерики обновлено

Итераторы iter.Seq в Go 1.23

Вопрос

Что такое iter.Seq[V] в Go 1.23?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Функция func(yield func(V) bool), по ней работает range. В Go 1.23 range научился ходить по функциям-итераторам. iter.Seq[V] это func(yield func(V) bool): итератор вызывает yield на каждом элементе и останавливается, если yield вернул false (тело цикла сделало break).

Варианты ответа

  1. Новый встроенный тип коллекции, похожий на слайс с ленивой загрузкой
  2. Канал, который итератор заполняет в отдельной горутине
  3. Интерфейс с методами Next и Value, как Iterator в Java
  4. Функция func(yield func(V) bool), по ней работает rangeправильный ответ

Разбор

В Go 1.23 range научился ходить по функциям-итераторам. iter.Seq[V] это func(yield func(V) bool): итератор вызывает yield на каждом элементе и останавливается, если yield вернул false (тело цикла сделало break). Никаких горутин и каналов, это обычные вызовы функций. Интерфейса Next/Value нет, хотя iter.Pull умеет превратить push-итератор в pull-стиль.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.