Caution

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

  1. トップページ
  2. Go辞典
  3. http.Get() / Post()

http.Get() / Post()

標準ライブラリの『net/http』パッケージを使うと、GoからHTTPリクエストを簡単に送れます。『http.Get()』でGETリクエスト、『http.Post()』でPOSTリクエストを実行できます。

構文
// GET リクエストを送る
resp, err := http.Get("URL")

// POST リクエストを送る(Content-Type とボディを指定)
resp, err := http.Post("URL", "application/json", body)

// レスポンスボディを読み込む(必ず Close する)
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
関数一覧
関数 / フィールド概要
http.Get(url)指定URLにGETリクエストを送り、レスポンスを返します。
http.Post(url, contentType, body)指定URLにPOSTリクエストを送ります。body は io.Reader を渡します。
http.PostForm(url, values)フォームデータ(url.Values)をPOSTします。
resp.StatusCodeHTTPステータスコード(200, 404 など)を整数で返します。
resp.Bodyレスポンスボディの io.ReadCloser です。読み込み後に必ず Close() を呼び出します。
io.ReadAll(r)io.Reader の全内容をバイトスライスで返します。
サンプルコード
package main

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

func main() {
	// GET リクエストを送る
	resp, err := http.Get("https://httpbin.org/get")
	if err != nil {
		fmt.Println("GETエラー:", err)
		return
	}
	defer resp.Body.Close()

	fmt.Println("ステータス:", resp.StatusCode)

	// レスポンスボディを読み込んで表示
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("読み込みエラー:", err)
		return
	}
	// 長いので先頭100文字だけ表示
	fmt.Println("レスポンス(先頭100文字):", string(body[:100]))

	// POST リクエストを送る(JSON ボディ)
	jsonBody := `{"name":"Gopher","lang":"Go"}`
	resp2, err := http.Post(
		"https://httpbin.org/post",
		"application/json",
		strings.NewReader(jsonBody),
	)
	if err != nil {
		fmt.Println("POSTエラー:", err)
		return
	}
	defer resp2.Body.Close()
	fmt.Println("POSTステータス:", resp2.StatusCode)
}
概要

『http.Get()』と『http.Post()』は手軽に使える関数ですが、タイムアウトやヘッダーのカスタマイズが必要な場合は『http.Client』と『http.NewRequest()』を組み合わせてください。

『resp.Body.Close()』を忘れると接続がリークし続けます。必ず『defer resp.Body.Close()』をレスポンスを受け取ったすぐ後に書く習慣をつけてください。また、ネットワーク通信が失敗した場合は err が nil でないためエラーチェックも必須です。

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