Go言語でHTTPステータスコードを正しく設定する基本!初心者でもわかるWeb開発
生徒
「先生、Go言語でWebアプリを作っているんですが、HTTPステータスコードって何ですか?」
先生
「HTTPステータスコードは、Webサーバーからブラウザやクライアントに返す数字で、リクエストが成功したか、エラーが発生したかを示します。」
生徒
「例えばどんなコードがありますか?」
先生
「例えば、成功した場合は200、ページが見つからない場合は404、サーバーエラーの場合は500などがあります。」
生徒
「なるほど。Go言語ではどうやって設定するんですか?」
先生
「それでは、基本的な使い方を順番に見ていきましょう。」
1. Go言語でHTTPステータスコードを返す方法
Go言語の標準ライブラリにはnet/httpパッケージがあり、http.ResponseWriterを使ってHTTPステータスコードを設定できます。WriteHeaderメソッドでコードを指定し、その後にレスポンス本文を書きます。
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK) // 200 OK
fmt.Fprintln(w, "リクエストは成功しました!")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
この例では、http.StatusOKを使って200ステータスを返しています。WriteHeaderはレスポンス本文より前に呼ぶ必要があります。
2. よく使うHTTPステータスコード一覧
HTTPステータスコードは大きく5つのカテゴリに分かれます。1xxは情報、2xxは成功、3xxはリダイレクト、4xxはクライアントエラー、5xxはサーバーエラーです。代表的なコードをいくつか紹介します。
200 OK:リクエスト成功201 Created:新しいリソースが作成された400 Bad Request:リクエストが不正401 Unauthorized:認証が必要403 Forbidden:アクセス禁止404 Not Found:ページが見つからない500 Internal Server Error:サーバー内部エラー
Go言語では、これらのコードに対応する定数がhttp.StatusOKやhttp.StatusNotFoundなどとして用意されており、数字を直接書くより可読性が高くなります。
3. ステータスコードによるエラーハンドリング
クライアントからのリクエストに問題がある場合は、適切なステータスコードを返してエラーを伝えることが重要です。
func errorHandler(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if path != "/ok" {
w.WriteHeader(http.StatusNotFound) // 404 Not Found
fmt.Fprintln(w, "ページが見つかりません")
return
}
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, "正常にアクセスできました")
}
この例では、リクエストURLが"/ok"でなければ404を返し、正常なら200を返します。これにより、ブラウザやAPIクライアントに正しい情報を伝えられます。
4. JSONレスポンスとステータスコードの組み合わせ
APIを作る場合、JSONレスポンスとステータスコードを組み合わせることがよくあります。Goではencoding/jsonパッケージを使ってJSONを返すことができます。
import (
"encoding/json"
)
type Response struct {
Message string `json:"message"`
}
func jsonHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
json.NewEncoder(w).Encode(Response{Message: "JSONレスポンス成功"})
}
このようにWriteHeaderでステータスコードを設定し、JSON形式でレスポンスを返すことで、クライアントに正しい情報と状態を伝えられます。
5. 注意点とベストプラクティス
WriteHeaderはレスポンス本文を書く前に必ず呼ぶ- HTTPステータスコードは意味に沿って正しく設定する(成功は2xx、エラーは4xx/5xxなど)
- API開発では、ステータスコードとレスポンス内容を一貫させる
- 数字より定数(
http.StatusOKなど)を使うと可読性が向上
正しいステータスコードの設定は、WebアプリやAPIの信頼性を高め、開発や運用の効率化にも繋がります。