Dev Study
Go コース

71. net/http — HTTP クライアントの概要

net/http パッケージは、標準ライブラリだけで HTTP クライアントとサーバーの両方を書けます。クライアント側は http.Get(url) で手早くリクエストでき、戻り値の *http.Response からステータスやボディを読みます。レスポンスのボディは io.ReadCloser なので、使い終わったら defer resp.Body.Close() で必ず閉じます。

細かく制御したいときは http.NewRequest でリクエストを組み立て、http.Client の Do で送ります。タイムアウトは http.Client の Timeout フィールドや、context と組み合わせて設定するのが実務の定番です。サーバー側は http.HandleFunc と http.ListenAndServe で簡単に立てられます。

下のコードは外部のネットワーク通信を行うため、このサイト上では実行できません(表示のみ)。ボディを閉じる defer と、ステータス・本文の読み取りという基本の流れを示しています。

サンプルコード(フレームワーク環境が必要なため表示のみ)

package main

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

func main() {
	resp, err := http.Get("https://go.dev")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close() // 必ず閉じる

	fmt.Println("status =", resp.StatusCode)
	body, err := io.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("先頭100バイト:", string(body[:100]))
}
公式ドキュメントで詳しく ↗