10.4 ルーター

ウェブアプリケーションを実装する上で、重要な部品が ルーター です。 マルチプレクサー とも呼ばれます。

ウェブアプリケーションは1つのポートでソケットをオープンしてリクエストを受け付けます。ブラウザやウェブフロントエンドはその1つのポートに対して認証やデータの取得、データの更新などのありとあらゆるリクエストを投げます。ウェブアプリケーションはこのリクエストの種類を分類して適切なレスポンスを返す必要があります。

ルーターがない世界であれば、このリクエストの振り分けには大量のif文を記述する必要があります。巨大なスパゲッティコードが誕生するでしょう。ルーターはメソッドとパスという2つの情報を元に処理を振り分けます。

10.4.1 標準ライブラリのhttp.ServeMux

リクエストの振り分けに使える機能は標準ライブラリにもあります。標準ライブラリでは2つの型をビルディングブロックとして扱います。1つはhttp.Handler型で、もう1つはhttp.HandlerFuncです。後者は前者でもあります。これらは振り分けられた後に呼ばれるハンドラーです。特定のURLごとにこのhttp.Handlerへの振り分けを行うのが、http.ServeMuxです。

リスト10-5: 特定のURLごとに振り分けを行う
package main

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

func main() {
	yes := 0
	no := 0
	mux := http.NewServeMux()
	mux.Handle("/asset/", http.StripPrefix("/asset/", http.FileServer(http