On Wed, Oct 29, 2025 at 4:01 PM [email protected] <[email protected]> wrote: > > tl;dr Why does Go choose not to exit cleanly when there are no more > goroutines to run? > > Background: > > As part of a Go pub quiz, I asked the question: > > What always happens when this code runs? > https://go.dev/play/p/opTvk1x-uAm > > Specifically, the code calls runtime.Goexit in the main goroutine. At > termination, the program prints: > > fatal error: no goroutines (main called runtime.Goexit) - deadlock! > > Why is this considered a fatal error? Obviously there are no more goroutines > to run, but why not exit cleanly in this case? > > Obviously there's a very good reason for this behavior. I just can't work out > what it is.
If the runtime cleanly exits on a deadlock then we no longer can detect unexpected deadlocks. Neither can we say if all "goroutines terminated" is expected or not. Hence "clean exit" iff main() returns. (Let's ignore os.Exit(rc) for a second.) -- 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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/golang-nuts/CAA40n-XzwiNt_51-0vfnsk2VuctL7PZSBg5x9g-0DExd4f%3DPfw%40mail.gmail.com.
