miyohideの日記

技術的なメモなどを記しています

2019年2月17日(日)

忙しさにかまけてやる気が迷子な気がする。

Go言語のお勉強

Go言語のお勉強として、いろいろとコードを読んでいるんだけれども、以下のサイトに書かれているコードを読んではて?と思った。

shogo82148.github.io

func newHandler() http.Handler {
    mux := http.NewServeMux()
    mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "from pid %d.\n", os.Getpid())
    })
    return mux
}

戻り値としてhttp.Handlerを指定しているのに、returnとしてhttp.NewServeMux()が返しているServeMuxを返すことができるんだろう...。

そんなことをウンウン悩んでいたら、以下のようなアドバイスを頂いた。鍋谷さん、ありがとうございます。

なるほど。確かにhttp.Handlerの定義を見ると、

type Handler interface {
        ServeHTTP(ResponseWriter, *Request)
}

とある。

golang.org

一方で、ServeMux型はServeHTTPを実装している。

golang.org

なるほど。Go言語、全然理解できてなかった。