Hi Tom, This is an interesting project.
Per your request for feedback: on quick inspection, I would certainly want also a way to close down the priority channels too. Some sort of Close() method that would stop all running goroutines from behind-the-scenes, so they do not leak, would be important for any long running process. Maybe even use of a context.Context to effect the shutdown? You'll quickly realize that every go channel "raw" operation (not in a select) needs to be wrapped in a select{} in order to not be deadlocked when the time to shutdown arrives (usually on a channel itself). So for instance, https://github.com/twpayne/go-heap/blob/v0.0.2/prioritychannel.go#L89 which says for value := range heap.All() { outCh <- value } would never do. One would need to allow for shutdown, something like: for value := range heap.All() { select { case outCh <- value: case <- shutdownRequestedCh: return // and presumably run other cleanup in a defer at the top of this func } } ...and repeat such fixes for all other "raw" channel sends and receives. Regards, Jason On Sunday, October 6, 2024 at 1:42:14 AM UTC+1 twp...@gmail.com wrote: > Have you ever wanted a channel that partially sorts the values being > passed through it? For example, you have some kind of work queue and you > want to do the most important work first. Well, now you can! > > github.com/twpayne/go-heap.PriorityChannel > <https://pkg.go.dev/github.com/twpayne/go-heap#PriorityChannel> > implements this: give it a channel and a comparison function and you get > back a new channel that returns values in priority order until the original > channel is closed. > > Only want the highest priority value from the last N? Then use > github.com/twpayne/go-heap.BufferedPriorityChannel > <https://pkg.go.dev/github.com/twpayne/go-heap#BufferedPriorityChannel>. > > Code is at https://github.com/twpayne/go-heap/blob/main/prioritychannel.go. > It's a fun combination of generics, iterators, and channels. > > Feedback welcome! > > Regards, > Tom > -- 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/a95ef59c-86b5-4524-bef5-1dacbe84de5en%40googlegroups.com.