Go言語のハンドラ関数の作り方とリクエスト処理の流れ
生徒
「Go言語でWebアプリを作るときにハンドラ関数って何ですか?」
先生
「ハンドラ関数とは、ブラウザからのリクエストを受け取って処理する関数のことです。」
生徒
「どうやってリクエストを受け取って処理するんですか?」
先生
「Goではnet/httpパッケージを使って、URLごとにハンドラ関数を登録することで処理できます。」
生徒
「具体的な作り方を教えてください!」
先生
「それでは、順を追って説明しますね。」
1. ハンドラ関数の基本
ハンドラ関数は、http.ResponseWriterと*http.Requestの二つの引数を受け取ります。ResponseWriterはブラウザに返すデータを作るためのもので、Requestはリクエストの内容を取得するための構造体です。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "こんにちは、GoのWebアプリ!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
2. リクエスト処理の流れ
ブラウザからURLにアクセスすると、GoのWebサーバーがそのリクエストを受け取ります。そして、http.HandleFuncで登録したURLパスに対応するハンドラ関数が呼び出されます。
ハンドラ関数内で、リクエストの内容に応じて表示内容を変えたり、データベースと連携した処理を行ったりすることができます。
3. URLごとに異なる処理を設定する
複数のURLに対して異なるハンドラ関数を設定することで、Webアプリに複数のページを持たせることができます。
package main
import (
"fmt"
"net/http"
)
func homeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "ホームページです")
}
func aboutHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "このサイトについて")
}
func main() {
http.HandleFunc("/", homeHandler)
http.HandleFunc("/about", aboutHandler)
http.ListenAndServe(":8080", nil)
}
4. リクエストの種類を判別する
HTTPリクエストにはGETやPOSTなどの種類があります。ハンドラ関数内でr.Methodを確認することで、リクエストの種類ごとに処理を分けることができます。
func handler(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
fmt.Fprintln(w, "GETリクエストを受け取りました")
} else if r.Method == "POST" {
fmt.Fprintln(w, "POSTリクエストを受け取りました")
}
}
5. ハンドラ関数作成のポイント
- ハンドラ関数は
ResponseWriterと*Requestを引数に持つ - URLごとに
http.HandleFuncで登録する - リクエストの種類(GETやPOST)を
r.Methodで判別できる - 処理は必要に応じて分岐させて柔軟に対応する
これらの基本を理解すれば、Go言語でWebアプリを作る際のハンドラ関数の仕組みが理解できます。まずは簡単なページから始めて、少しずつ複雑なリクエスト処理に挑戦してみましょう。
まとめ
ハンドラ関数とリクエスト処理の全体像を振り返る
この記事では、Go言語を使ったWebアプリ開発の中でも特に重要な「ハンドラ関数」と「リクエスト処理の流れ」について、基礎から丁寧に確認してきました。 ハンドラ関数は、ブラウザなどのクライアントから送られてくるHTTPリクエストを受け取り、どのようなレスポンスを返すかを決める役割を持っています。 Webアプリの画面表示やデータのやり取りは、すべてこのハンドラ関数を中心に動いていると言っても過言ではありません。
Go言語では net/http パッケージを使うことで、比較的シンプルなコードでWebサーバーを立ち上げ、URLごとに処理を分けることができます。
http.HandleFunc を使ってURLとハンドラ関数を結びつけることで、
「このURLにアクセスされたら、この処理を実行する」という流れを直感的に作ることができます。
プログラミング未経験の方でも、URLと処理の対応関係を意識しながら学習することで、Webアプリの仕組みを理解しやすくなります。
リクエスト処理を理解することの大切さ
ブラウザからWebアプリにアクセスするとき、内部ではHTTPリクエストが送信されています。 GoのWebサーバーはそのリクエストを受け取り、登録されたハンドラ関数を呼び出します。 ハンドラ関数の中では、リクエストの内容を確認し、画面に表示する文字を変えたり、処理内容を分岐させたりすることができます。 たとえば、GETリクエストとPOSTリクエストを区別することで、画面表示とデータ送信の処理を分けることが可能になります。
最初は「リクエスト」「レスポンス」という言葉に戸惑うかもしれませんが、 「ブラウザからお願いが届き、サーバーが返事をする」という流れをイメージすると理解しやすくなります。 ハンドラ関数は、その返事の内容を決める重要な役割を担っており、 Webアプリの動きそのものを形作る存在です。
シンプルなサンプルで理解を深める
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "こんにちは、ハンドラ関数のまとめページです")
}
func main() {
http.HandleFunc("/summary", helloHandler)
http.ListenAndServe(":8080", nil)
}
このサンプルでは、URLとハンドラ関数を一対一で対応させる基本的な形をあらためて確認しています。 こうした小さなプログラムを実際に動かしながら理解を深めることで、 Go言語によるWebアプリ開発の流れが自然と身についていきます。
生徒
「最初はハンドラ関数って何をしているのかよく分からなかったんですけど、 URLと処理をつなげる役割だと分かって、だいぶスッキリしました」
先生
「それは良いですね。Go言語のWeb開発では、 ハンドラ関数の考え方が分かると全体の流れが一気に見えてきます」
生徒
「URLにアクセスすると、登録した関数が呼ばれて、 その中で画面に表示する内容を決めているんですよね」
先生
「その通りです。さらにリクエストの種類を見分けられるようになると、 フォーム送信やデータ処理にも対応できるようになります」
生徒
「まずはシンプルなハンドラ関数から作って、 少しずつ処理を増やしていくのが良さそうですね」
先生
「その進め方がおすすめです。 基本を大切にしながら学んでいけば、 Go言語でのWebアプリ開発はきっと楽しくなりますよ」