39 lines
962 B
Go
39 lines
962 B
Go
// +build go1.7
|
|
|
|
package router
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
)
|
|
|
|
type paramsKey struct{}
|
|
|
|
// ParamsKey is the request context key under which URL params are stored.
|
|
//
|
|
// This is only present from go 1.7.
|
|
var ParamsKey = paramsKey{}
|
|
|
|
// Handler is an adapter which allows the usage of an http.Handler as a
|
|
// request handle. With go 1.7+, the Params will be available in the
|
|
// request context under ParamsKey.
|
|
func (r *Router) Handler(method, path string, handler http.Handler) {
|
|
r.Handle(method, path,
|
|
func(w http.ResponseWriter, req *http.Request, p Params) {
|
|
ctx := req.Context()
|
|
ctx = context.WithValue(ctx, ParamsKey, p)
|
|
req = req.WithContext(ctx)
|
|
handler.ServeHTTP(w, req)
|
|
},
|
|
)
|
|
}
|
|
|
|
// ParamsFromContext pulls the URL parameters from a request context,
|
|
// or returns nil if none are present.
|
|
//
|
|
// This is only present from go 1.7.
|
|
func ParamsFromContext(ctx context.Context) Params {
|
|
p, _ := ctx.Value(ParamsKey).(Params)
|
|
return p
|
|
}
|