Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Go辞典
  3. http.Request / ResponseWriter

http.Request / ResponseWriter

HTTPハンドラーの引数『http.Request』はリクエストの情報を、『http.ResponseWriter』はレスポンスの書き込みインタフェースを提供します。

構文
// ハンドラー関数のシグネチャ
func handler(w http.ResponseWriter, r *http.Request) {
    // リクエストの情報を読む
    method := r.Method        // HTTPメソッド(GET, POST など)
    path   := r.URL.Path      // URLパス
    query  := r.URL.Query()   // クエリパラメータ(map[string][]string)

    // レスポンスを書く
    w.Header().Set("Content-Type", "text/plain")
    w.WriteHeader(http.StatusOK) // ステータスコードを設定
    fmt.Fprintln(w, "レスポンス本文")
}
関数一覧
フィールド / メソッド概要
r.MethodHTTPメソッド文字列("GET", "POST" など)を返します。
r.URL.PathリクエストのURLパス(例: "/api/users")を返します。
r.URL.Query()クエリパラメータをマップ形式(map[string][]string)で返します。
r.FormValue(key)フォームまたはクエリパラメータから指定キーの値を返します。
r.Bodyリクエストボディの io.ReadCloser です。POSTデータを読み込む際に使います。
w.Header().Set(key, value)レスポンスヘッダーを設定します。WriteHeader() より前に呼び出す必要があります。
w.WriteHeader(code)HTTPステータスコードを設定します。一度しか呼べません。
w.Write(data)バイトスライスをレスポンスボディに書き込みます。
サンプルコード
package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	// HTTPメソッドを確認する
	fmt.Println("メソッド:", r.Method)

	// クエリパラメータを取得する(?name=Gopher)
	name := r.URL.Query().Get("name")
	if name == "" {
		name = "名無し"
	}

	// メソッドによって処理を分岐する
	switch r.Method {
	case http.MethodGet:
		w.Header().Set("Content-Type", "text/plain; charset=utf-8")
		fmt.Fprintf(w, "こんにちは、%sさん!\n", name)

	case http.MethodPost:
		// リクエストボディを読み込む
		body, _ := io.ReadAll(r.Body)
		defer r.Body.Close()
		w.Header().Set("Content-Type", "text/plain; charset=utf-8")
		fmt.Fprintf(w, "受信: %s\n", string(body))

	default:
		// 許可されていないメソッド
		w.WriteHeader(http.StatusMethodNotAllowed)
		fmt.Fprintln(w, "許可されていないメソッドです")
	}
}

func main() {
	http.HandleFunc("/", handler)
	log.Fatal(http.ListenAndServe(":8080", nil))
}
概要

『http.Request』にはリクエストのあらゆる情報が含まれています。クッキーは『r.Cookie(name)』、ヘッダーは『r.Header.Get(key)』で取得できます。フォームデータを扱う場合は先に『r.ParseForm()』を呼び出す必要があります。

『w.WriteHeader()』はボディを書き込む前に1回だけ呼べます。ボディを書き込んだ後に WriteHeader() を呼び出してもステータスコードは変わりません。ヘッダーの設定も『WriteHeader()』または最初の『Write()』より前に行う必要があります。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。