🔴 Сложный · 3 очк. Циклы и range
Что такое range over function в Go 1.23+?
A Вызов функции для каждого элемента range
B Использование функции-итератора func(yield func(V) bool) в for range
C Передача range как аргумента функции
D Параллельный range
Объяснение вопроса

В Go 1.23 в цикл for range можно передавать специальные функции-итераторы. Функция вызывает yield для каждого элемента; если yield возвращает false, итерация прерывается (аналог break).

Идея

Вместо возврата всего слайса или канала итератор отдаёт элементы по одному. Пакеты slices и maps предоставляют такие итераторы: slices.All, maps.All, maps.Keys, maps.Values и т.д.

for x := range slices.All([]int{1, 2, 3}) {
    fmt.Println(x)
}
for k, v := range maps.All(m) {
    // ...
}

Преимущества

Ленивая итерация без выделения промежуточных слайсов, возможность прервать перебор через возврат false из yield.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.