[context] optimize context reset and reuse

This commit is contained in:
wjqserver 2025-06-06 22:40:40 +08:00
parent 450d6294ad
commit 1d5ffac153
2 changed files with 7 additions and 3 deletions

View file

@ -60,7 +60,12 @@ type Context struct {
// 每次从 sync.Pool 中获取 Context 后,都需要调用此方法进行初始化。 // 每次从 sync.Pool 中获取 Context 后,都需要调用此方法进行初始化。
func (c *Context) reset(w http.ResponseWriter, req *http.Request) { func (c *Context) reset(w http.ResponseWriter, req *http.Request) {
if rw, ok := c.Writer.(*responseWriterImpl); ok && !rw.IsHijacked() {
rw.reset(w)
} else {
c.Writer = newResponseWriter(w) c.Writer = newResponseWriter(w)
}
//c.Writer = newResponseWriter(w)
c.Request = req c.Request = req
c.Params = c.Params[:0] // 清空 Params 切片,而不是重新分配,以复用底层数组 c.Params = c.Params[:0] // 清空 Params 切片,而不是重新分配,以复用底层数组

View file

@ -33,13 +33,12 @@ type responseWriterImpl struct {
// NewResponseWriter 创建并返回一个 responseWriterImpl 实例 // NewResponseWriter 创建并返回一个 responseWriterImpl 实例
func newResponseWriter(w http.ResponseWriter) ResponseWriter { func newResponseWriter(w http.ResponseWriter) ResponseWriter {
rw := &responseWriterImpl{ return &responseWriterImpl{
ResponseWriter: w, ResponseWriter: w,
status: 0, // 明确初始状态 status: 0, // 明确初始状态
size: 0, size: 0,
hijacked: false, hijacked: false,
} }
return rw
} }
func (rw *responseWriterImpl) reset(w http.ResponseWriter) { func (rw *responseWriterImpl) reset(w http.ResponseWriter) {