忙しさにかまけてやる気が迷子な気がする。
Go言語のお勉強
Go言語のお勉強として、いろいろとコードを読んでいるんだけれども、以下のサイトに書かれているコードを読んではて?と思った。
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.NewServeMux が返すServeMux型が、http.Handler interface が要求する関数 ServeHTTP(ResponseWriter, *Request) を実装しているからです。
— 鍋谷 武典 (@Nabetani) February 17, 2019
で、質問に答えてます?
なるほど。確かにhttp.Handler
の定義を見ると、
type Handler interface { ServeHTTP(ResponseWriter, *Request) }
とある。
一方で、ServeMux
型はServeHTTP
を実装している。
なるほど。Go言語、全然理解できてなかった。