第8期 2018-05-31 线下活动 - Go 标准包阅读
参与人数: 10 人
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
?
原子操作比用锁更节约一点性能。
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的思考?