第 8 期 2018-05-31 線下活動 - Go 標準包閱讀

mai_yang發表於2020-02-13

文章來自於:https://reading.developerlearning.cn/reading/8-2018-05-31-net-http-part2/

觀看視訊

Go 標準包閱讀

Go 版本:go 1.10.2

net/http

  • server.go

問題

func (s *Server) doKeepAlives() bool {
    return atomic.LoadInt32(&s.disableKeepAlives) == 0 && !s.shuttingDown()
}

為什麼要用 atomic.LoadInt32(&s.disableKeepAlives) == 0

原子操作比用鎖更節約一點效能。

  1. server.go#Shutdown 不保險

  2. panicChan := make(chan interface{}, 1)

panicChan := make(chan interface{}, 1)
go func() {
    defer func() {
        if p := recover(); p != nil {
            panicChan <- p
        }
    }()
    h.handler.ServeHTTP(tw, r)
    close(done)
}()
select {
case p := <-panicChan:
    panic(p)
    ...

外部處理就不能按照你的意願去處理了,如果不拿出來,那麼程式就掛掉了。

  1. // Deprecated: ErrWriteAfterFlush is no longer used. ErrWriteAfterFlush = errors.New("unused")

  2. Header() Header 註釋引發的 Trailer 的思考?

延伸閱讀

  1. HTTP Chunked Body/Trailer 編碼
  2. example_ResponseWriter_trailers
  3. HTTP Header Trailer

更多原創文章乾貨分享,請關注公眾號

更多原創文章乾貨分享,請關注公眾號
  • 第 8 期 2018-05-31 線下活動 - Go 標準包閱讀
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章