``` func productHandler(w http.ResponseWriter, r *http.Request) { key := r.URL.Path[len("/products/"):] switch r.Method { case "GET": // do GET stuff case "POST": // Fo POST stuff default: http.Error(w, "Method Not Allowed", 405) } } ``` ``` type server struct { container *someContainer router *someRouter } func (s *server) product() http.HandlerFunc { type getRequest struct { Name string } type getResponse struct { Greeting string `json:"greeting"` } get := func(r *http.Request) () { } GET /products POST /products GET /products/10 PUT /products/10 return func(w http.ResponseWriter, r *http.Request) { key := r.URL.Path[len("/products/"):] switch r.Method { case "GET": data, err := parseGet(r) s.container.Get case "POST": // Fo POST stuff default: http.Error(w, s.template.NotAllowed(), 405) } } } ```