I like:

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

There are some examples of this pattern in 
https://pkg.go.dev/github.com/bobg/seqs

Cheers,
- Bob
On Thursday, August 29, 2024 at 5:41:47 AM UTC-7 Dmitriy P wrote:

> 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/49ea54d4-5cb7-44a9-8e6e-9375939d52a5n%40googlegroups.com.

Reply via email to