Hello,
in golang.org/doc/articles/wiki/ the makeHandler() code looks like this:
func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
m := validPath.FindStringSubmatch(r.URL.Path)
if m == nil {
http.NotFound(w, r)
return
}
fn(w, r, m[2])
}
}
func main() {
http.HandleFunc("/view/", makeHandler(viewHandler))
http.HandleFunc("/edit/", makeHandler(editHandler))
http.HandleFunc("/save/", makeHandler(saveHandler))
log.Fatal(http.ListenAndServe(Port, nil))
}
IMHO the above code is very sophisticated (using Function Literals and Closures).
Does something speak against using code that is easier to understand like this:
func wrapHandler(w http.ResponseWriter, r *http.Request) {
m := validPath.FindStringSubmatch(r.URL.Path)
if m == nil {
http.NotFound(w, r)
return
}
switch m[1] {
case "view": viewHandler(w, r, m[2])
case "edit": editHandler(w, r, m[2])
case "save": saveHandler(w, r, m[2])
}
}
func main() {
http.HandleFunc("/", wrapHandler)
log.Fatal(http.ListenAndServe(Port, nil))
}
Bye
Karl