Documentation
¶
Overview ¶
This package only contains some example which did not fit to other packages. See other packages' godoc for usage.
Example (Dec_enc_round_trip) ¶
package main
import (
"bytes"
"encoding/json"
"fmt"
"maps"
"os"
"github.com/ngicks/go-iterator-helper/hiter"
"github.com/ngicks/go-iterator-helper/hiter/errbox"
"github.com/ngicks/go-iterator-helper/x/exp/xiter"
)
func main() {
src := []byte(`
{"foo":"foo"}
{"bar":"bar"}
{"baz":"baz"}
`)
rawDec := json.NewDecoder(bytes.NewReader(src))
dec := errbox.New(hiter.Decode[map[string]string](rawDec))
defer dec.Stop()
enc := json.NewEncoder(os.Stdout)
err := hiter.Encode(
enc,
xiter.Map(
func(m map[string]string) map[string]string {
return maps.Collect(
xiter.Map2(
func(k, v string) (string, string) { return k + k, v + v },
maps.All(m),
),
)
},
dec.IntoIter(),
),
)
fmt.Printf("dec error = %v\n", dec.Err())
fmt.Printf("enc error = %v\n", err)
}
Output: {"foofoo":"foofoo"} {"barbar":"barbar"} {"bazbaz":"bazbaz"} dec error = <nil> enc error = <nil>
Example (Peek_and_continue) ¶
package main
import (
"fmt"
"github.com/ngicks/go-iterator-helper/hiter"
"github.com/ngicks/go-iterator-helper/hiter/iterable"
"github.com/ngicks/go-iterator-helper/x/exp/xiter"
)
func main() {
// iterator that yields 0 to 9 sequentially.
src := hiter.Range(0, 10)
fmt.Println("It replays data if break-ed and resumed.")
count := 3
first := true
for v := range src {
count--
if count < 0 {
break
}
if !first {
fmt.Print(", ")
}
first = false
fmt.Printf("%d", v)
}
fmt.Println()
fmt.Println("break and resume")
first = true
for v := range xiter.Limit(src, 3) {
if !first {
fmt.Print(", ")
}
first = false
fmt.Printf("%d", v)
}
fmt.Print("\n\n")
fmt.Println("converting it to be resumable.")
resumable := iterable.NewResumable(src)
v0, _ := hiter.First(resumable.IntoIter())
fmt.Printf("first: %d\n", v0)
v1, _ := hiter.First(resumable.IntoIter())
fmt.Printf("second: %d\n", v1)
fmt.Println()
fmt.Println("reconnect them to whole iterator.")
first = true
for v := range xiter.Concat(hiter.Single(v0), hiter.Single(v1), resumable.IntoIter()) {
if !first {
fmt.Print(", ")
}
first = false
fmt.Printf("%d", v)
}
fmt.Println()
}
Output: It replays data if break-ed and resumed. 0, 1, 2 break and resume 0, 1, 2 converting it to be resumable. first: 0 second: 1 reconnect them to whole iterator. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Example (Worker_channels) ¶
package main
import (
"context"
"fmt"
"maps"
"slices"
"sync"
"github.com/ngicks/go-iterator-helper/hiter"
"github.com/ngicks/go-iterator-helper/hiter/iterable"
"github.com/ngicks/go-iterator-helper/x/exp/xiter"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
works := []string{"foo", "bar", "baz"}
in := make(chan string, 5)
out := make(chan hiter.KeyValue[string, error])
var wg sync.WaitGroup
wg.Add(3)
for range 3 {
go func() {
defer wg.Done()
_, _ = hiter.ChanSend(
ctx,
out,
xiter.Map(
func(s string) hiter.KeyValue[string, error] {
return hiter.KeyValue[string, error]{
K: "✨" + s + "✨" + s + "✨",
V: nil,
}
},
hiter.Chan(ctx, in),
),
)
}()
}
var wg2 sync.WaitGroup
wg2.Add(1)
go func() {
defer wg2.Done()
wg.Wait()
close(out)
}()
_, _ = hiter.ChanSend(ctx, in, slices.Values(works))
close(in)
results := maps.Collect(hiter.FromKeyValue(hiter.Chan(ctx, out)))
for result, err := range iterable.MapSorted[string, error](results).Iter2() {
fmt.Printf("result = %s, err = %v\n", result, err)
}
wg2.Wait()
}
Output: result = ✨bar✨bar✨, err = <nil> result = ✨baz✨baz✨, err = <nil> result = ✨foo✨foo✨, err = <nil>
Directories
¶
| Path | Synopsis |
|---|---|
|
internal
|
|
|
cmd/fill_readme
command
|
|
|
x
|
|
|
exp/xiter
Code copied from
|
Code copied from |
Click to show internal directories.
Click to hide internal directories.