参与人数: 10 人
Go 标准包阅读
Go 版本:go 1.10.2
- server.go
func (s *Server) doKeepAlives() bool {
return atomic.LoadInt32(&s.disableKeepAlives) == 0 && !s.shuttingDown()
}
为什么要用 atomic.LoadInt32(&s.disableKeepAlives) == 0
?
原子操作比用锁更节约一点性能。
-
server.go#Shutdown 不保险
-
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)
...
外部处理就不能按照你的意愿去处理了,如果不拿出来,那么进程就挂掉了。
-
// Deprecated: ErrWriteAfterFlush is no longer used. ErrWriteAfterFlush = errors.New("unused")
-
Header() Header 注释引发的Trailer的思考?