golang中http server.go中的testHookServerServe函式變數寫法問題

906591446發表於2018-08-29
var testHookServerServe func(*Server, net.Listener) // used if non-nil

func (srv *Server) Serve(l net.Listener) error {
    defer l.Close()
    if fn := testHookServerServe; fn != nil {
        fn(srv, l)
    }
    var tempDelay time.Duration // how long to sleep on accept failure

    if err := srv.setupHTTP2_Serve(); err != nil {
        return err
    }

    srv.trackListener(l, true)
    defer srv.trackListener(l, false)

    baseCtx := context.Background() // base is always background, per Issue 16220
    ctx := context.WithValue(baseCtx, ServerContextKey, srv)
    for {
        rw, e := l.Accept()
        if e != nil {
            select {
            case <-srv.getDoneChan():
                return ErrServerClosed
            default:
            }
            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
                }
                srv.logf("http: Accept error: %v; retrying in %v", e, tempDelay)
                time.Sleep(tempDelay)
                continue
            }
            return e
        }
        tempDelay = 0
        c := srv.newConn(rw)
        c.setState(c.rwc, StateNew) // before Serve can return
        go c.serve(ctx)
    }
}

這是 http 包 server.go 標準庫的程式碼 本文的第 6 行程式碼 這種寫法是什麼意思啊 難道是判斷引數中的兩個變數是否為空(我瞎猜的)???希望能舉出點例子 幫助我理解下 感謝!!!

更多原創文章乾貨分享,請關注公眾號
  • golang中http server.go中的testHookServerServe函式變數寫法問題
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章