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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/2baf7784-b900-46d5-ae8d-f674713ba41bn%40googlegroups.com.