Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
生徒
「Go言語でWebアプリを作るときに、http.ResponseWriterとhttp.Requestってよく出てきますけど、これは何ですか?」
先生
「http.ResponseWriterはブラウザに返すデータを書き込むための仕組み、http.Requestはブラウザから送られてきたリクエストの情報を取得するための仕組みです。」
生徒
「もう少し具体的にいうとどういうことですか?」
先生
「たとえば、ブラウザが『このページを表示してください』と要求すると、それがRequestに入ります。そして、ResponseWriterにHTMLや文字列を書き込むことでブラウザに返します。」
生徒
「なるほど、Requestが受け取る側で、ResponseWriterが返す側なんですね!」
先生
「そうです。では、実際にコードで確認してみましょう。」
1. ResponseWriterでブラウザに出力する
http.ResponseWriterを使うと、ブラウザに文字やHTMLを返すことができます。fmt.Fprintlnを使って簡単に文字列を返せます。
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. Requestでリクエスト情報を取得する
http.Requestは、ブラウザから送られてきた情報を取得するための構造体です。URLパスやクエリパラメータ、リクエストメソッドなどを取得できます。
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "リクエストのURL:", r.URL.Path)
fmt.Fprintln(w, "リクエストメソッド:", r.Method)
}
上記のコードでは、アクセスしたURLのパスとGETやPOSTなどのメソッドをブラウザに表示しています。
3. Queryパラメータを使って動的に処理する
Requestのr.URL.Query()を使うと、URLに含まれるクエリパラメータを取得できます。たとえば、?name=太郎と付けてアクセスすると、その値を取得できます。
func handler(w http.ResponseWriter, r *http.Request) {
name := r.URL.Query().Get("name")
if name == "" {
name = "名無し"
}
fmt.Fprintf(w, "こんにちは、%sさん!", name)
}
このようにすることで、URLによって表示内容を変える動的なWebページを作ることができます。
4. Requestのヘッダー情報を取得する
Requestにはブラウザの情報やCookieなども含まれています。r.Headerを使うと、ブラウザの種類や送信された情報を確認できます。
func handler(w http.ResponseWriter, r *http.Request) {
userAgent := r.Header.Get("User-Agent")
fmt.Fprintf(w, "あなたのブラウザは %s です", userAgent)
}
このようにしてユーザーの環境に合わせた処理を行うことも可能です。
5. ResponseWriterとRequestを使うポイント
- ResponseWriterに出力することで、ブラウザに文字列やHTMLを返せる
- RequestからはURL、メソッド、ヘッダー、クエリパラメータなどを取得できる
- これらを組み合わせることで、ユーザーのリクエストに応じた柔軟なWebアプリを作れる
- まずは簡単な文字列の表示から始めて、徐々にリクエスト情報を活用してみる
ResponseWriterとRequestの仕組みを理解すれば、Go言語でWebアプリを作るときの基本的な流れがわかります。初心者でも、少しずつ慣れていくことが大切です。