Go имеет встроенный цикл range для перебора срезов, массивов, строк, карт и каналов.
Для итерации по другим типам данных функция итератора с обратными вызовами является чистой и довольно эффективной абстракцией.
Базовый шаблон итератора
// Iterate вызывает функцию f с n = 1, 2 и 3.
func Iterate(f func(n int)) {
for i := 1; i <= 3; i++ {
f(i)
}
}
В использовании:
Iterate(func(n int) { fmt.Println(n) })
1
2
3
Итератор с break
// Iterate вызывает функцию f с n = 1, 2 и 3.
// Если f возвращает true, Iterate возвращается немедленно,
// пропуская все оставшиеся значения.
func Iterate(f func(n int) (skip bool)) {
for i := 1; i <= 3; i++ {
if f(i) {
return
}
}
}
В использовании:
Iterate(func(n int) (skip bool) {
fmt.Println(n)
return n == 2
})
1
2
Читайте также:
Комментариев нет:
Отправить комментарий