レスポンス
Go標準ライブラリのnet/http
パッケージを利用して、レスポンスを書き込む方法を説明します。
レスポンスの書き込み
HTTPレスポンスは次のように書き込みます。
package main
import (
"net/http"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", handler)
server := http.Server{
Addr: ":8080",
Handler: mux,
}
server.ListenAndServe()
}
func handler(w http.ResponseWriter, r *http.Request) {
// レスポンスヘッダの設定
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
// ステータスコードの設定
// この後でレスポンスヘッダの設定はできない
w.WriteHeader(http.StatusBadRequest)
// レスポンスボディの書き込み
w.Write([]byte("Bad request!\n"))
// http.Requestはio.Writerとして扱えるため、これでもOK
// fmt.Fprintln(w, "Bad request!")
}
次の順序通りに実行する必要がある点に注意してください。
ResponseWriter.Header.Set
:ヘッダを設定するResponseWriter.WriteHeader
:ステータスコードを設定し、ステータス行とヘッダを送信するResponseWriter.Write
:ボディを書き込む
Webサーバを起動して、curlコマンドを使って実行します。
curl -i "localhost:8080/"
実行結果は次の通りです。ハンドラで設定した内容が返却されたことを確認できます。
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
Date: Sat, 12 Dec 2020 12:12:12 GMT
Content-Length: 13
Bad request!