feat(context): return GIN Context from Value method (#2825)

This commit is contained in:
Faisal Alam 2022-04-23 15:32:54 +05:30 committed by GitHub
parent d8e053d15f
commit e61cc06955
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 0 deletions

View File

@ -39,6 +39,9 @@ const (
// BodyBytesKey indicates a default body bytes key. // BodyBytesKey indicates a default body bytes key.
const BodyBytesKey = "_gin-gonic/gin/bodybyteskey" const BodyBytesKey = "_gin-gonic/gin/bodybyteskey"
// ContextKey is the key that a Context returns itself for.
const ContextKey = "_gin-gonic/gin/contextkey"
// abortIndex represents a typical value used in abort functions. // abortIndex represents a typical value used in abort functions.
const abortIndex int8 = math.MaxInt8 >> 1 const abortIndex int8 = math.MaxInt8 >> 1
@ -1163,6 +1166,9 @@ func (c *Context) Value(key any) any {
if key == 0 { if key == 0 {
return c.Request return c.Request
} }
if key == ContextKey {
return c
}
if keyAsString, ok := key.(string); ok { if keyAsString, ok := key.(string); ok {
if val, exists := c.Get(keyAsString); exists { if val, exists := c.Get(keyAsString); exists {
return val return val

View File

@ -1880,6 +1880,7 @@ func TestContextGolangContext(t *testing.T) {
assert.Equal(t, ti, time.Time{}) assert.Equal(t, ti, time.Time{})
assert.False(t, ok) assert.False(t, ok)
assert.Equal(t, c.Value(0), c.Request) assert.Equal(t, c.Value(0), c.Request)
assert.Equal(t, c.Value(ContextKey), c)
assert.Nil(t, c.Value("foo")) assert.Nil(t, c.Value("foo"))
c.Set("foo", "bar") c.Set("foo", "bar")