Documentation ¶
Overview ¶
Package iterator describes a generic Iterator interface and related utilities.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrIteratorDone = errors.New("iterator is read to the end or closed")
ErrIteratorDone is returned when the iterator is read to the end or closed.
Functions ¶
func ConsumeCount ¶
ConsumeCount returns the number of elements in the iterator. ErrIteratorDone error is returned as nil; any other error is returned as-is.
It always closes the iterator.
func ConsumeValues ¶
ConsumeValues consumes all values from iterator until it is done. ErrIteratorDone error is returned as nil; any other error is returned as-is.
It always closes the iterator.
func ConsumeValuesN ¶
ConsumeValuesN consumes up to n values from iterator or until it is done. ErrIteratorDone error is returned as nil; any other error is returned as-is.
Iterator is closed when it is done or on any error. Simply consuming n values does not close the iterator.
Consuming already done iterator returns (nil, nil). The same result is returned for n = 0.
Types ¶
type Closer ¶
type Closer interface {
Close()
}
Closer is a part of Interface for closing iterators.
type CloserFunc ¶
type CloserFunc func()
CloserFunc converts a function (such as context.CancelFunc) to a Closer.
type Interface ¶
type Interface[K, V any] interface { // Next returns the next key/value pair, where the key is a slice index, map key, document number, etc, // and the value is the slice or map value, next document, etc. // // Returned error could be (possibly wrapped) ErrIteratorDone or some fatal error // like (possibly wrapped) context.Canceled. // In any case, even if iterator was read to the end, and Next returned ErrIteratorDone, // or Next returned fatal error, // Close method still should be called. // // Next should return either key/value pair or error, not both and not neither. // For example, single-value iterators should not return (key, value, ErrIteratorDone). // // Next should not be called concurrently with other Next calls, // but it can be called concurrently with Close. Next() (K, V, error) // Close indicates that the iterator will no longer be used. // After Close is called, future calls to Next must return ErrIteratorDone, // even if previous call returned a different error. // // Close must be called. // If it wasn't, the iterator might leak resources or panic later. // // Close must be concurrency-safe and may be called multiple times. // All calls after the first should have no observable effect. Close() }
Interface is an iterator interface.
type MultiCloser ¶
type MultiCloser struct {
// contains filtered or unexported fields
}
MultiCloser is a helper for closing multiple closers.
func NewMultiCloser ¶
func NewMultiCloser(closers ...Closer) *MultiCloser
NewMultiCloser returns a new MultiCloser for non-nil closers.
func (*MultiCloser) Add ¶
func (mc *MultiCloser) Add(closers ...Closer)
Add adds non-nil closers to the MultiCloser.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package testiterator provides a helper for checking iterator implementations.
|
Package testiterator provides a helper for checking iterator implementations. |