From 1d5ffac1533cc3ad1900720ddc341e0f9b317e63 Mon Sep 17 00:00:00 2001 From: wjqserver <114663932+WJQSERVER@users.noreply.github.com> Date: Fri, 6 Jun 2025 22:40:40 +0800 Subject: [PATCH] [context] optimize context reset and reuse --- context.go | 7 ++++++- respw.go | 3 +-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/context.go b/context.go index 7a64cc4..3172f6f 100644 --- a/context.go +++ b/context.go @@ -60,7 +60,12 @@ type Context struct { // 每次从 sync.Pool 中获取 Context 后,都需要调用此方法进行初始化。 func (c *Context) reset(w http.ResponseWriter, req *http.Request) { - c.Writer = newResponseWriter(w) + if rw, ok := c.Writer.(*responseWriterImpl); ok && !rw.IsHijacked() { + rw.reset(w) + } else { + c.Writer = newResponseWriter(w) + } + //c.Writer = newResponseWriter(w) c.Request = req c.Params = c.Params[:0] // 清空 Params 切片,而不是重新分配,以复用底层数组 diff --git a/respw.go b/respw.go index e94bfa7..ebbc9ee 100644 --- a/respw.go +++ b/respw.go @@ -33,13 +33,12 @@ type responseWriterImpl struct { // NewResponseWriter 创建并返回一个 responseWriterImpl 实例 func newResponseWriter(w http.ResponseWriter) ResponseWriter { - rw := &responseWriterImpl{ + return &responseWriterImpl{ ResponseWriter: w, status: 0, // 明确初始状态 size: 0, hijacked: false, } - return rw } func (rw *responseWriterImpl) reset(w http.ResponseWriter) {