Hi, Java is certainly not Go, now we have a great simplification to develop code, but you can clarify the context for making a decision in the description of the ValueListHandler J2EE pattern.
Regards, пятница, 6 сентября 2024 г. в 02:11:39 UTC+3, cpasmaboiteaspam: > Hello, > > I would definitely use *func Iter(ctx, data) iter.Seq2[T, error]* > > Because its standard and it is easy for the end user to build a bridge to > a scanner like API > such as struct[T any]{ All() iter.Seq[T]; Err() error }, > or* anything else*. > > Because i have make the *trailing error return* a *first citizen*, > that signature fits straight into my own experiments . > > For certain, i would not use func IterWithErr(ctx, data, err *error) > iter.Seq[T] > It data raced the second i tried this approach. > > spaghetti for thoughts. > https://go.dev/play/p/55w9IqH0KPQ > > > > Le mardi 3 septembre 2024 à 19:19:31 UTC+2, Christoph Berger a écrit : > >> I like this approach. >> >> - bufio.Scanner-style errors are a known pattern from the stdlib >> - The approach keeps the key and value params free for their intended >> use >> - It doesn't require nested iter seqs >> - It is compatible with range loops >> >> Made some sample code as PoC -> https://go.dev/play/p/6qhH6ZN6f0S (Doesn't >> work in the playground due to network restrictions) >> >> On Saturday, August 31, 2024 at 1:38:53 PM UTC+2 gbarr wrote: >> >>> I would likely go with something similar to how you would currently use >>> bufio.Scanner but comine the use of .Scan() and .Text() as Range() >>> >>> ```go >>> iter := rows.Iter(ctx) >>> for obj := iter.Range { >>> // do something with obj >>> } >>> if err := iter.Err(); err != nil { >>> return err >>> } >>> ``` >>> >>> Or if rows can only have a single active iterator the there is no need >>> for the iter object >>> >>> ```go >>> for obj := rows.Range(ctx) { >>> // do something with obj >>> } >>> if err := rows.Err(); err != nil { >>> return err >>> } >>> ``` >>> >>> Graham. >>> >>> On Thursday, August 29, 2024 at 1:41:47 PM UTC+1 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/436b5c60-3989-42f4-891f-c7e158a27a84n%40googlegroups.com.