Go言語のhttp.ServeMuxを使ったルーティングの基本
生徒
「先生、Go言語でWebアプリを作るときに、URLごとに処理を分けたいんですけど、どうすればいいですか?」
先生
「それなら、Go標準ライブラリのhttp.ServeMuxを使うと便利です。URLごとに処理を登録できるんですよ。」
生徒
「ServeMuxって何ですか?」
先生
「ServeMuxは、URLとハンドラー(処理)を結びつけるルーターのようなものです。アクセスされたURLに応じて、どの処理を呼び出すか判断してくれます。」
生徒
「なるほど、具体的な例を見せてもらえますか?」
1. http.ServeMuxでルーティングする基本
Go言語では、http.NewServeMux()でServeMuxのインスタンスを作り、HandleFuncメソッドでURLごとの処理を登録します。最後にhttp.ListenAndServeでサーバーを起動します。
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "こんにちは、Goの世界へようこそ!")
}
func aboutHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "このページはGo言語で作られたサンプルです。")
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/hello", helloHandler)
mux.HandleFunc("/about", aboutHandler)
http.ListenAndServe(":8080", mux)
}
この例では、/helloにアクセスするとhelloHandlerが呼ばれ、/aboutにアクセスするとaboutHandlerが呼ばれます。ServeMuxがURLごとに適切な処理を振り分けてくれる仕組みです。
2. ServeMuxを使うメリット
ServeMuxを使うことで、URLごとの処理を簡単に整理でき、複雑なWebアプリでもスッキリした構造にできます。ポイントは以下の通りです。
- URLパスごとにハンドラーを登録できるので、処理が分かりやすい。
- 標準ライブラリだけでルーティングが可能で、外部ライブラリを使わなくてもOK。
- ServeMuxを変数にしておけば、複数のルーターを使い分けることもできる。
- ハンドラー関数は
http.ResponseWriterと*http.Requestを受け取る形式で統一されているので、処理の共通化が簡単。
これにより、Go言語でのWebアプリ開発でURLごとのルーティングを整理しやすくなります。
3. URLルーティングの応用例
ServeMuxを使うと、例えばユーザー情報ページや管理ページなど、複数のURLを簡単に整理できます。
func userHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "ユーザー情報ページです")
}
func adminHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "管理者専用ページです")
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/user", userHandler)
mux.HandleFunc("/admin", adminHandler)
http.ListenAndServe(":8080", mux)
}
このようにしておけば、/userと/adminにアクセスされた場合に、それぞれ異なる処理を簡単に返せます。URLごとに分けることでコードが整理され、見通しも良くなります。
4. まとめると
Go言語でWebアプリを作るときは、http.ServeMuxを使うことでURLごとの処理を整理できます。ServeMuxを使ったルーティングは、標準ライブラリだけで完結し、初心者でも理解しやすい仕組みです。ハンドラー関数とURLパスを組み合わせて、簡単に複数ページのWebアプリを作ることができます。