Skip to content

gotidy/iters

Repository files navigation

CI State Go Doc

iters

Go iterators.

Installation

go get github.com/gotidy/iters

General Iterators

The iters library provides a set of general-purpose iterators that simplify the process of transformation, creation and using collections.

Examples:

Filter: Filtering sequence elements.

seq := Filter(
    slices.Values([]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}),
    func(i int) bool { return i%2 == 0 },
)   

Map: Transforming sequence elements

for v := range Map(slices.Values([]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}), func(i int) string { return strconv.Itoa(i) }) {
    ...
}

Other examples can be found in tests.

Retry

The Retry iterator is allowed to iterate over sequence of delays, with the specified delays. The Retry waits for the specified delay before retrying, except cases when context is cancelled.

The Repeat, Trim, Of, Exponential, Jitter, MaxElapsedTime functions can be used to define delays suppliers. It is also possible to define your own iterator for special behavior.

for attempt, delay := range Retry(context.Background(), Jitter(Trim(Exponential(time.Millisecond, time.Second, 2), 5), 0.5)) {
    if err = doSomething(); err == nil {
        return nil
    }
    fmt.Println(attempt, delay)
}
return err
for range MaxElapsedTime(Retry(ctx, Repeat(time.Second)), time.Minute) {
    ...
}