func (r *Router) handle(h http.HandlerFunc) httprouter.Handle {
	return func(w http.ResponseWriter, req *http.Request, params httprouter.Params) {
		ctx, cancel := context.WithCancel(req.Context())
		defer cancel()
		for _, p := range params {
			ctx = context.WithValue(ctx, param(p.Key), p.Value)
		}
		h(w, req.WithContext(ctx))
	}
}
handle turns a HandlerFunc into an httprouter.Handle.
package route
import (
	"net/http"
	"github.com/julienschmidt/httprouter"
	"golang.org/x/net/context"
)
type param string
func Param(ctx context.Context, p string) string {
	return ctx.Value(param(p)).(string)
}
func WithParam(ctx context.Context, p, v string) context.Context {
	return context.WithValue(ctx, param(p), v)
}
type Router struct {
	rtr    *httprouter.Router
	prefix string
}
func New() *Router {
	return &Router{
		rtr: httprouter.New(),
	}
}
func (r *Router) WithPrefix(prefix string) *Router {
	return &Router{rtr: r.rtr, prefix: r.prefix + prefix}
}