Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
先生と生徒の会話形式で理解しよう
生徒
「先生、Webアプリでページを自動的に別のURLに移動させたいんですが、Go言語でどうやるんですか?」
先生
「その場合はhttp.Redirectを使うと簡単です。ブラウザに『ここに移動してください』と指示を出すイメージです。」
生徒
「リダイレクトって、どんな場面で使うんですか?」
先生
「例えばログイン後にトップページに移動させたり、古いURLから新しいURLに案内するときに使います。」
生徒
「なるほど、具体的な書き方を教えてください!」
1. http.Redirectの基本構文
Go言語のhttp.Redirectは、net/httpパッケージで提供されており、次の3つの引数を取ります。
http.ResponseWriter:レスポンスを書き込むためのオブジェクト*http.Request:現在のリクエスト情報url string:移動先のURLstatus int:HTTPステータスコード(例:301, 302)
http.Redirect(w, r, "/newpage", http.StatusFound) // 302リダイレクト
この例では、ブラウザに「/newpageへ移動してください」と指示しています。ステータスコードhttp.StatusFoundは302で、一時的なリダイレクトを意味します。
2. 一時的リダイレクトと恒久的リダイレクト
リダイレクトには2種類あります。
- 一時的リダイレクト(302):一時的にURLを変更する場合に使用
- 恒久的リダイレクト(301):完全にURLが変わった場合に使用
http.Redirect(w, r, "/permanent", http.StatusMovedPermanently) // 301リダイレクト
恒久的リダイレクトは検索エンジンにも伝わるため、SEO対策としても重要です。
3. 実際にリダイレクト処理を作る例
package main
import (
"fmt"
"net/http"
)
func oldHandler(w http.ResponseWriter, r *http.Request) {
// 古いページから新しいページにリダイレクト
http.Redirect(w, r, "/new", http.StatusMovedPermanently)
}
func newHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "新しいページに移動しました!")
}
func main() {
http.HandleFunc("/old", oldHandler)
http.HandleFunc("/new", newHandler)
http.ListenAndServe(":8080", nil)
}
このコードでは、/oldにアクセスすると自動的に/newに移動し、移動先のページ内容が表示されます。
4. リダイレクトを使うときの注意点
- リダイレクトはHTTPレスポンスのヘッダーで行うため、本文を書き込む前に
http.Redirectを呼ぶ - 無限リダイレクトを避けるため、リダイレクト先を正しく設定する
- ステータスコードを正しく選択する(301か302か)
- セキュリティ面では、ユーザー入力を直接URLに使わない
5. まとめの前に応用例
ログイン処理後のリダイレクトや、古いブログ記事のURLを新しいURLに誘導する場合など、実務でもよく使われます。Go言語のhttp.Redirectを正しく理解しておくと、Webアプリのユーザー体験を向上させられます。