Question about makeHandler() in golang.org/doc/articles/wiki/

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

No, however I think “easier to understand” is completely subjective in this example. In my own subjective opinion, I don’t think function literals or closures are significantly more complicated than passing functions as parameters, such as how you’re passing wrapHandler as a parameter in your second example.