← 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]))
}