HTTPリクエストの送信
http.NewRequestとhttp.DefaultClientによるGET、POST
「HTTPリクエストの送信」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
http.Get のショートカット
http.Get(url) は GET リクエストを作成する最も簡単な方法です。必ずレスポンス本文を閉じてください。
resp, err := http.Get("https://api.example.com/users")
if err != nil { return err }
defer resp.Body.Close()http.DefaultClient
http.Get はパッケージレベルの DefaultClient を使用します。本番環境では、タイムアウトを設定したカスタムクライアントを作成します。
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)完全な制御のための http.NewRequest
http.NewRequest を使用すると、メソッド、ヘッダー、本文を設定できます。
req, err := http.NewRequestWithContext(ctx, "POST", url, body)
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)リクエスト本文
io.Reader を通じてリクエスト本文を渡します。JSON ペイロードには、bytes.NewBuffer(data) または strings.NewReader を使用します。
data, _ := json.Marshal(payload)
req, _ := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(data))レスポンスステータスの確認
必ず HTTP ステータスコードを確認してください。4xx/5xx は、デフォルトでは Go のエラーとして返されません。
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unexpected status: %d", resp.StatusCode)
}JSON レスポンスのデコード
レスポンス本文を最初にすべてメモリへ読み込まないよう、json.Decoder でデコードします。
var result APIResponse
json.NewDecoder(resp.Body).Decode(&result)クエリパラメーター
url.Values でクエリ文字列を作成し、URL に追加します。
params := url.Values{}
params.Set("page", "1")
params.Set("limit", "20")
reqURL := baseURL + "?" + params.Encode()Client.Do とカスタムトランスポート
http.DefaultTransport をラップすると、デフォルトの動作を失わずに、リトライ処理、カスタム TLS、プロキシ設定を追加できます。
レスポンス本文は必ず閉じる
レスポンス本文を閉じないと、基盤となる TCP 接続がリークします。エラーレスポンスの場合でも、必ず defer resp.Body.Close() を使用してください。
リダイレクトの追従
デフォルトのクライアントは、最大 10 回までリダイレクトに追従します。client.CheckRedirect を設定して、リダイレクトの追従方法をカスタマイズまたは無効化します。
User-Agent の設定
サーバーログでクライアントを識別できるよう、説明的な User-Agent ヘッダーを設定します。
req.Header.Set("User-Agent", "myapp/1.0 (+https://myapp.com)")確認問題
HTTP レスポンス本文を必ず閉じる必要があるのはなぜですか。
まとめ:HTTP リクエストの作成
重要なポイント:
- 必ず resp.Body.Close() を defer します
- 本番環境では Timeout を設定したカスタム http.Client を作成します
- コンテキストとカスタムヘッダーには http.NewRequestWithContext を使用します
- resp.StatusCode を確認します。HTTP エラーは Go のエラーではありません
よくある質問
「HTTPリクエストの送信」レッスンは無料ですか?
はい。「HTTPリクエストの送信」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「HTTPリクエストの送信」で何を学びますか?
http.NewRequestとhttp.DefaultClientによるGET、POST ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「HTTPリクエストの送信」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- HTTPリクエストの送信
- タイムアウトとヘッダーの設定
- JSONレスポンスのデコード
- エラー処理とリトライロジック