Hi gophers, 

I hope someone can help finding out why a particular goroutine call can 
block the main goroutine.

In the following code, all "go" calls spawn off a goroutine and return as 
expected, except for the last one that blocks the main goroutine. 

Is this a bug, or am I missing something subtle or even obvious (obvious to 
all others only of course)?

package main

import (
        "log"
        "net/http"
)

func main() {
        // all of these work as expected
        go http.ListenAndServe("localhost:8080", nil)
        go log.Println("goroutine")
        go func() {
                log.Println(http.ListenAndServe("localhost:8081", nil))
        }()

        // The following line blocks the main goroutine.
        go log.Println(http.ListenAndServe("localhost:8082", nil))

        log.Println("after go log.Println(http.ListenAndServe())") // never 
prints
        select {} // remove this, and the code still never finishes
}

All three servers eventually run (try curl localhost:8080; curl 
localhost:8081; curl localhost:8082),

In the playground <https://go.dev/play/p/vObgGGM7MJD>, the code even 
deadlocks. 

Any idea?

-- 
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/fd72b5b3-f01e-44d5-a1a0-f784fe7b884fn%40googlegroups.com.

Reply via email to