GoでHTTPレスポンスを返すときに,成功時とエラー時で異なるアプローチが必要になることがあります.特に,エラーレスポンスを送信するためのhttp.Error
関数と,それに対応する成功レスポンス時の処理について新たな学びがあったため,ここに残しておきます.
http.ResponseWriter
とは
まず,GoのHTTPハンドラではhttp.ResponseWriter
を使ってレスポンスを書き込みます.http.ResponseWriter
は,ステータスコードやメッセージを設定し,レスポンスを生成するためのインターフェースです.
基本的な使い方としては,以下のようにステータスコードとメッセージを設定します.
w.WriteHeader(http.StatusOK)
w.Write([]byte("This is a successful response"))
ここでは成功時を例に挙げましたが,エラーレスポンスを送信するためにはこの2行の処理を一括で行うことのできるhttp.Error
が用意されています.
http.Error
について
http.Error
は,エラーレスポンスを簡単に送信するための関数で,上述の通りエラーステータスコードとエラーメッセージを1行で設定することができるため,エラーハンドリングがシンプルになります.
例えば,サーバー内でエラーが発生した際には,以下のようにhttp.Error
を使います.
http.Error(w, "An error occured", http.StatusInternalServerError)
http.Error
の内部処理
http.Error
は,以下の2つの処理をまとめて行っています.
1. ステータスコードの設定
w.WriteHeader(statusCode)
を内部で呼び出し,エラーステータスコードを設定します.
2. エラーメッセージの送信
`w.Write([]byte("message"))を使って,メッセージ本文としてエラーメッセージを送信します.
まとめ
-
http.Error
は,エラーメッセージとステータスコードを一度に設定して送信できる便利な関数 - 成功時はそのような便利関数が提供されていないため,
w.WriteHeader
とw.Write
を組み合わせて送信する必要がある