Ah, my apologies, I was wrong. Panicking in the midst of a func passed to one of these pipeline stages most certainly *will not* shut down the entire pipeline and cannot be recovered like I had suggested. Sorry about that.
Sincerely, K. Alex Mills On Thu, Aug 11, 2022 at 4:56 PM K. Alex Mills <k.alex.mi...@gmail.com> wrote: > See the example added in this PR > <https://github.com/splunk/go-genlib/pull/24/files#diff-be22e454f59be60b572bf51007825f39f863a2b8e5dacfb32efeab4d1177d2f9R680> > for one way to do error handling with this library without involving > panic/recover. > > One possible drawback to this approach is that it doesn't provide a way to > return an error directly from a `func` which has been passed to a pipeline > stage. I considered that, but it would seem to involve yet another pair of > variants for each proto stage: e.g. Map, MapCtx, MapCtxErr, and MapErr, > with the following signatures: > > func Map [S, T any](ctx context.Context, in <-chan S, f func(S) T, > opts ...Option) <-chan T > func MapCtx [S, T any](ctx context.Context, in <-chan S, f > func(context.Context, S) T, opts ...Option) <-chan T > func MapErr [S, T any](ctx context.Context, in <-chan S, f func(S) (T, > error), opts ...Option) <-chan T > func MapCtxErr[S, T any](ctx context.Context, in <-chan S, f > func(context.Context, S) (T, error), opts ...Option) <-chan T > > ...this proliferation of variants of essentially "the same" function is > making me reconsider some of my life choices. Asking each stage to capture > and interact with the ErrorSink yields a smaller API surface area. That > said, the Err variants would allow the library to do things like store > the ErrorSink in the context and use it if it's present. > > I'm not sure that's worth the complexity, and it feels very much like > "magic", where it seems Go "should" be explicit, but I can be convinced > otherwise. > > All that said, if you *really* want to panic and you don't mind the > pipeline shutting down whenever you do, I don't think there's anything > stopping you from doing so with this library. Just use recover at the top > of the func that spins up the pipeline and use context.WithCancel to shut > the rest of the pipeline down in that case. Let me know if that's unclear > and I'll do my best to provide an example. > > Sincerely, > > K. Alex Mills > > > On Thu, Aug 11, 2022 at 4:18 PM Robert Engels <reng...@ix.netcom.com> > wrote: > >> Every modern language with generics or similar has a streams package so >> there’s no need to call out Java. >> >> Like I said, you can chain by passing and checking the errors within the >> streamcontext. >> >> On Aug 11, 2022, at 3:59 PM, Jan Mercl <0xj...@gmail.com> wrote: >> >> >> >> >> On Thu, Aug 11, 2022, 22:37 Robert Engels <reng...@ix.netcom.com> wrote: >> >>> I don’t think that is relevant. It is very difficult to do chaining with >>> Go’s error model. >>> >> >> I don't think "Go's error model" is a thing. The language specification >> does not mention it and I'm not aware of any official Go documentation that >> should be considered the "Go's error model". >> >> Go has the predefined error interface with a single method. That's all. >> The rest is at most a convention. No need to make a ceremony of it. >> >> Wrt "it's very difficult...". Of course it's difficult to do idioms from >> other languages in Go when those idioms Go intentionally does not support. >> So the claim is sort of a tautology, isn't it? >> >> Once again, having different preferences is okay. Generalizing personal >> preferences as Go fault is IMO not okay. >> >> Maybe you can fill a proposal at the Go issue tracker to add all/some/any >> Java/etc idioms to Go and let's see how it works. >> >> You can pass a shared context to every node and store the error in the >>> context and protect against concurrent access. It’s doable but not easy. >>> >>> Map/reduce and most functional patterns are easily represented using >>> chains. >>> >>> But like I said, I would use panic/recover in the framework to make it >>> easier. >>> >>> >>> >>> On Aug 11, 2022, at 3:27 PM, Jan Mercl <0xj...@gmail.com> wrote: >>> >>> >>> >>> >>> On Thu, Aug 11, 2022, 21:36 Robert Engels <reng...@ix.netcom.com> wrote: >>> >>>> I’d say it certainly highlights a problem with Go’s error model. >>>> Exceptions would fit nicely here - instead it seems you needed to ignore >>>> all error handling - because chaining is impossible with error returns. >>>> >>> >>> It's okay if someone prefers the way Java does things, but the best >>> thing about Go is IMHO that it is not Java. And I still hope it stays away >>> from becoming Java as long as possible. >>> >>> >>>> A streams api with panic/recover is needed. >>>> >>>> On Aug 11, 2022, at 12:55 PM, K. Alex Mills <k.alex.mi...@gmail.com> >>>> wrote: >>>> >>>> >>>> Hello Gophers, >>>> >>>> I recently had an opportunity to try out Go generics on a small >>>> pipelines package >>>> <https://pkg.go.dev/github.com/splunk/go-genlib/pipelines>, along with >>>> some of my coworkers. >>>> >>>> The overall goal of this package is to provide helpers for separating >>>> concurrency from the core logic of the computation. The result was intended >>>> for I/O bound computations, and so it's likely inappropriate for managing >>>> short-lived goroutines. It takes a functional programming approach, >>>> providing helpers with familiar names seen in other APIs like Map, FlatMap, >>>> OptionMap, etc. One feature which I am particularly happy with is that >>>> concurrency concerns like worker pool size and channel buffers are >>>> configurable with minimal disruption to the rest of the code. >>>> >>>> Take a look at the library >>>> <https://pkg.go.dev/github.com/splunk/go-genlib/pipelines> and its >>>> accompanying blog post <https://kalexmills.com/journal/pipelines/>. >>>> I'm open to any of your thoughts, suggestions, and issue reports. >>>> >>>> Sincerely, >>>> >>>> K. Alex Mills >>>> >>>> -- >>>> 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/CALJzkY_zASs-YOukv6ciSO45b93jz39DmjAWA915kfBuwimkgQ%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/golang-nuts/CALJzkY_zASs-YOukv6ciSO45b93jz39DmjAWA915kfBuwimkgQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> -- >>>> 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/6954C3FB-0E78-4922-8889-90FA58BA3F16%40ix.netcom.com >>>> <https://groups.google.com/d/msgid/golang-nuts/6954C3FB-0E78-4922-8889-90FA58BA3F16%40ix.netcom.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> 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/CAA40n-WfWSMbV8p79xXGbS2%2BQ0M8pQfUPupqGnzGAdbo%2BTx0JA%40mail.gmail.com >>> <https://groups.google.com/d/msgid/golang-nuts/CAA40n-WfWSMbV8p79xXGbS2%2BQ0M8pQfUPupqGnzGAdbo%2BTx0JA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >>> -- >> 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/CAA40n-VQnNZQZ1%2BpuivmOFs-2B7TnhtPeugGPAJ%3DCKc8PVAknQ%40mail.gmail.com >> <https://groups.google.com/d/msgid/golang-nuts/CAA40n-VQnNZQZ1%2BpuivmOFs-2B7TnhtPeugGPAJ%3DCKc8PVAknQ%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> -- 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/CALJzkY8%3DX%2BAhzzHjQn-Rv4sd4B60izKd_gG4mPevMVYAKAnFYQ%40mail.gmail.com.