http://m0t0k1ch1st0ry.com/blog/2014/06/09/golang/

for ループを起動して、リクエストを待ち受けている。リクエストが来ると net.Listener.Accept がそれを受けてコネクションを設立し、リクエストに対して goroutine を1つ立ち上げるようになっている。

func (srv *Server) Serve(l net.Listener) error {  
    defer l.Close()
    var tempDelay time.Duration
    for {
        rw, e := l.Accept()
        if e != nil {
            if ne, ok := e.(net.Error); ok && ne.Temporary() {
                if tempDelay == 0 {
                    tempDelay = 5 * time.Millisecond
                } else {
                    tempDelay *= 2
                }
                if max := 1 * time.Second; tempDelay > max {
                    tempDelay = max
                }
                log.Printf("http: Accept error: %v; retrying in %v", e, tempDelay)
                time.Sleep(tempDelay)
                continue
            }
            return e
        }
        tempDelay = 0
        c, err := srv.newConn(rw)
        if err != nil {
            continue
        }
        go c.serve()
    }
}