Channels are almost always better than low-level primitives like condition variables, which have various pitfalls.
This video by Bryan C Mills explains some of the issues, and shows channel-based alternatives: https://www.youtube.com/watch?v=5zXAHh5tJqQ On Wednesday, 21 July 2021 at 07:04:27 UTC+1 skarl...@gmail.com wrote: > I think this is a perfect scenario for sync.Cond > https://pkg.go.dev/sync#Cond. > > On Tuesday, 20 July 2021 at 21:21:27 UTC+2 prawira.d...@gmail.com wrote: > >> I personally like to use range channel to "break out" process in >> goroutine, for example : >> >> package main >> import ( >> "fmt" >> "sync" >> ) >> func main() { >> var wg sync.WaitGroup >> c := make(chan bool) >> wg.Add(1) >> go func() { >> defer wg.Done() >> for b := range c { >> fmt.Printf("Hello %t\n", b) >> } >> }() >> c <- true >> c <- true >> close(c) >> wg.Wait() >> } >> >> Dave Chenney has great post about this post : >> http://dave.cheney.net/2013/04/30/curious-channels. >> >> Hope this helps >> >> >> >> >> On Wed, Jul 21, 2021 at 12:45 AM Brian Candler <b.ca...@pobox.com> wrote: >> >>> Which goroutine panics: the one which got a successful login, or the >>> other ones? >>> >>> If the goroutine which sees a successful login panics, then that's a >>> problem with that particular goroutine, and you'll need to debug it in the >>> normal way. Reading the panic message carefully would be a good starting >>> point. >>> >>> Note that you don't "break out" of a goroutine; you can break out of a >>> loop. You can terminate a goroutine simply by returning from the function >>> that was invoked by "go <somefunc>" >>> >>> If you want to terminate the other goroutines, then the standard way to >>> do that is to use a Context, and signal the context as "done". If those >>> goroutines are blocked on I/O, they should be modified so that they make >>> use of the context too. There is a blog post here >>> <https://blog.golang.org/context> you'll find useful. But it seems to >>> me this is a separate problem to the one of the original goroutine throwing >>> a panic. >>> >>> On Tuesday, 20 July 2021 at 17:29:22 UTC+1 Tenjin wrote: >>> >>>> I am wanting to try and login to mutiple servers at once (bruteforce) >>>> now I am spawning a new goroutine for each set of credentials. I want to >>>> be >>>> able to break out of my loop that I have once a successful login is met, >>>> as >>>> of right now the program just throws a panic and I am unsure of what I can >>>> do. >>> >>> -- >>> 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...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/golang-nuts/f1953fe9-0cef-4f24-bf72-804a078bcb7an%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/golang-nuts/f1953fe9-0cef-4f24-bf72-804a078bcb7an%40googlegroups.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/5b5415bf-89f0-41ad-8d0f-ca4c6395941cn%40googlegroups.com.