Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!
Ітератор

Ітератор на Go

Ітератор — це поведінковий патерн, що дозволяє послідовно обходити складну колекцію, не розкриваючи деталі її реалізації.

Завдяки Ітераторові, клієнт може обходити різні колекції в один і той же спосіб, використовуючи єдиний інтерфейс ітераторів.

Концептуальний приклад

Суть патерна Ітератор — вивести логіку послідовного проходження колекції в окремий об’єкт під назвою «ітератор». Цей ітератор надає універсальні методи для послідовного проходження колекції незалежно від її типу.

collection.go: Колекція

package main

type Collection interface {
	createIterator() Iterator
}

userCollection.go: Конкретна колекція

package main

type UserCollection struct {
	users []*User
}

func (u *UserCollection) createIterator() Iterator {
	return &UserIterator{
		users: u.users,
	}
}

iterator.go: Ітератор

package main

type Iterator interface {
	hasNext() bool
	getNext() *User
}

userIterator.go: Конкретний ітератор

package main

type UserIterator struct {
	index int
	users []*User
}

func (u *UserIterator) hasNext() bool {
	if u.index < len(u.users) {
		return true
	}
	return false

}
func (u *UserIterator) getNext() *User {
	if u.hasNext() {
		user := u.users[u.index]
		u.index++
		return user
	}
	return nil
}

user.go: Клієнтський код

package main

type User struct {
	name string
	age  int
}

main.go: Клієнтський код

package main

import "fmt"

func main() {

	user1 := &User{
		name: "a",
		age:  30,
	}
	user2 := &User{
		name: "b",
		age:  20,
	}

	userCollection := &UserCollection{
		users: []*User{user1, user2},
	}

	iterator := userCollection.createIterator()

	for iterator.hasNext() {
		user := iterator.getNext()
		fmt.Printf("User is %+v\n", user)
	}
}

output.txt: Результат виконання

User is &{name:a age:30}
User is &{name:b age:20}
На основі: Golang By Example

Ітератор іншими мовами програмування

Ітератор на C# Ітератор на C++ Ітератор на Java Ітератор на PHP Ітератор на Python Ітератор на Ruby Ітератор на Rust Ітератор на Swift Ітератор на TypeScript