четверг, 14 мая 2020 г.

Как реализовать итератор в Golang

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


Читайте также:


Комментариев нет:

Отправить комментарий