В 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.