github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/net/http/httpjson/context.go (about) 1 package httpjson 2 3 import ( 4 "context" 5 "net/http" 6 ) 7 8 // key is an unexported type for keys defined in this package. 9 // This prevents collisions with keys defined in other packages. 10 type key int 11 12 // Keys for HTTP objects in Contexts. 13 // They are unexported; clients use Request and ResponseWriter 14 // instead of using these keys directly. 15 const ( 16 reqKey key = iota 17 respKey 18 ) 19 20 // Request returns the HTTP request stored in ctx. 21 // If there is none, it panics. 22 // The context given to a handler function 23 // registered in this package is guaranteed to have 24 // a request. 25 func Request(ctx context.Context) *http.Request { 26 return ctx.Value(reqKey).(*http.Request) 27 } 28 29 // ResponseWriter returns the HTTP response writer stored in ctx. 30 // If there is none, it panics. 31 // The context given to a handler function 32 // registered in this package is guaranteed to have 33 // a response writer. 34 func ResponseWriter(ctx context.Context) http.ResponseWriter { 35 return ctx.Value(respKey).(http.ResponseWriter) 36 } 37 38 // WithRequest returns a context with an HTTP request stored in it. 39 // It is useful for testing. 40 func WithRequest(ctx context.Context, req *http.Request) context.Context { 41 return context.WithValue(ctx, reqKey, req) 42 }