Posted at

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

More than 5 years have passed since last update.

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

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)
}