5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GoによるHTTPレスポンス: `http.Error`と成功レスポンスの違い

Posted at

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.WriteHeaderw.Writeを組み合わせて送信する必要がある
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?