[Go言語] httpハンドラの共通部分を取り出していい感じにする

October 14, 2013

この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。

ハンドラをラップするようなハンドラを作る関数つくればいい。

package main

import (
    "fmt"
    "log"
    "net/http"
)

func baseHandlerFunc(handler func(w http.ResponseWriter, r *http.Request)) http.Handler {
    return baseHandler(http.HandlerFunc(handler))
}

func baseHandler(handler http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // common
        log.Println(r.URL, r.Method)
        handler.ServeHTTP(w, r)
    })
}

// handler
func index(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "hello")
}

func main() {
    http.Handle("/", baseHandlerFunc(index))
    http.ListenAndServe(":8080", nil)
}