package iterator type ( Iterator[T any] struct { index int values []T } ) func New[T any](values []T) *Iterator[T] { return &Iterator[T]{ values: values, } } func (it *Iterator[T]) Next() bool { if len(it.values) == it.index { return false } it.index += 1 return true } func (it *Iterator[T]) Value() T { if len(it.values) == 0 { var zero T return zero } if len(it.values) == it.index { var zero T return zero } return it.values[it.index] } func (it *Iterator[T]) IsEmpty() bool { return len(it.values) == 0 }