What is the best way to handle errors with iterators?

How to handle error when we have some object and some type paginates data 
(e.g. database/sql.Rows or 
https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ListObjectsV2Paginator)?
I found three, but which should be preferable or maybe I've missed some?

```go
type Object smth.Smth
type Paginator interface {
GetNext(ctx) ([]Object, error) // func doing heavy request over internet 
HaveNext() bool 
}
```

```go
func Iter(ctx, data) iter.Seq2[Object, error]

for obj, err := Iter(...) {
if err != nil {
return err
}
// do smth with Object
}
```

```go
func IterWithErr(ctx, data, err *error) iter.Seq[Object]

var err error
for obj := IterWithErr(..., &err) {
// do smth with Object
}
if err != nil {
return err
}
```

```go
func IterOverIter(ctx, data) iter.Seq2[iter.Seq[Object], error]

for page, err := IterOverIter(...) {
if err != nil {
return err
}
for obj := page(...) {
// do smth with Object
}
}
```


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/2baf7784-b900-46d5-ae8d-f674713ba41bn%40googlegroups.com.

Reply via email to