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