Go言語で簡単なWebサーバーを作ってみる
以下の図のような、簡単なWebサーバーを作ってみます。
リクエストがWebサーバーに送信されると、要求されたURLをマルチプレクサ(多重通信の入り口 DefaultServeMux)が調べ、リクエストをハンドラにリダイレクトします。
ハンドラはリクエストから情報を取得し、処理します。
ソースコードは以下となります。
package main import ( "fmt" "net/http" ) type MyHandler struct {} func (h *MyHandler) ServeHTTP(w http.ResponseWriter, *http.Request) { fmt.Fprintf(w, "Hello World!") } func main() { myHandler := MyHandler{} server := http.Server{ Addr: "127.0.0.1:8080", // (1) } http.Handle("/", &myHandler) // (2) server.ListenAndServe() }
(1) 構造体Structを初期化するとき、Handlerの値を指定しません。これによって、http.DefaultServeMuxをハンドラとして使用することになります。
type Server struct { Addr string // TCP address to listen on, ":http" if empty Handler Handler // handler to invoke, http.DefaultServeMux if nil <-- このコメントで説明されています。 … }
(2) http.Handle関数は、DefaultServeMux(ServeMux)のHandleメソッドが呼び出し、URLパターンとハンドラーを登録します。
func Handle(pattern string, handler Handler) { DefaultServeMux.Handle(pattern, handler) // <-- ここで、DefaultServeMux(ServeMux)のHandleメソッドが呼びだされます。 }
Go言語はしっかりとしたドキュメントが提供されており、ドキュメントから具体的なソースコードを表示することもできるので、プログラムがどのように処理されているか分かりやすいですね。
golang.org