diff --git a/context.go b/context.go index 5a8ce2d..6479a69 100644 --- a/context.go +++ b/context.go @@ -456,6 +456,12 @@ func (c *Context) GetReqBodyFull() ([]byte, error) { }() } else { limitBytesReader = c.Request.Body + defer func() { + err := limitBytesReader.Close() + if err != nil { + c.AddError(fmt.Errorf("failed to close request body: %w", err)) + } + }() } data, err := copyb.ReadAll(limitBytesReader) @@ -484,6 +490,12 @@ func (c *Context) GetReqBodyBuffer() (*bytes.Buffer, error) { }() } else { limitBytesReader = c.Request.Body + defer func() { + err := limitBytesReader.Close() + if err != nil { + c.AddError(fmt.Errorf("failed to close request body: %w", err)) + } + }() } data, err := copyb.ReadAll(limitBytesReader) diff --git a/mergectx.go b/mergectx.go index e6c223d..4c91601 100644 --- a/mergectx.go +++ b/mergectx.go @@ -69,15 +69,9 @@ func MergeCtx(parents ...context.Context) (ctx context.Context, cancel context.C return mc, mc.cancel } -// Value 实现了 context.Context 的 Value 方法. -// 它会按顺序遍历所有父 context, 并返回第一个找到的非 nil 值. +// Value 返回当前Ctx Value func (mc *mergedContext) Value(key any) any { - for _, p := range mc.parents { - if v := p.Value(key); v != nil { - return v - } - } - return nil + return mc.Context.Value(key) } // Deadline 实现了 context.Context 的 Deadline 方法.