0Pricing
Go Academy · レッスン

タイムアウトとヘッダーの設定

クライアントのタイムアウト、カスタムヘッダー、認証トークン

「タイムアウトとヘッダーの設定」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

クライアントレベルのタイムアウト

http.Client.Timeout を設定して、リクエストからレスポンスまでの合計時間に上限を設けます。これは最も簡単に設定できるタイムアウトです。

client := &http.Client{Timeout: 10 * time.Second}

トランスポートレベルのタイムアウト

http.Transport を使って、接続確立と TLS ハンドシェイクのタイムアウトを細かく設定します。

t := &http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   5 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    TLSHandshakeTimeout:   5 * time.Second,
    ResponseHeaderTimeout: 5 * time.Second,
}
client := &http.Client{Transport: t, Timeout: 30 * time.Second}

コンテキストベースのタイムアウト

コンテキストのタイムアウトはリクエストごとに設定され、後続の呼び出しに伝播します。期限を過ぎるとリクエストをキャンセルします。

ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)

リクエストヘッダーの設定

req.Header.Set(置き換え)または req.Header.Add(追加)でリクエストにヘッダーを追加します。

req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Accept", "application/json")
req.Header.Set("X-Request-ID", requestID)

一般的なヘッダー

リクエスト本文には Content-Type、必要なレスポンス形式には Accept、認証トークンには Authorization、クライアントの識別には User-Agent を使用します。

レスポンスヘッダーの読み取り

resp.Header.Get(key) からレスポンスヘッダーを読み取ります。

contentType := resp.Header.Get("Content-Type")
retryAfter := resp.Header.Get("Retry-After")

アイドル接続のタイムアウト

トランスポートに IdleConnTimeout を設定してアイドル状態の接続を閉じ、トラフィックが減少したときに接続が蓄積するのを防ぎます。

t.IdleConnTimeout = 90 * time.Second
t.MaxIdleConnsPerHost = 10

TLS 設定

トランスポート上の tls.Config を使って、TLS(最小バージョンやクライアント証明書など)をカスタマイズします。

t.TLSClientConfig = &tls.Config{MinVersion: tls.VersionTLS12}

タイムアウトエラーの検出

errors.As を使って、タイムアウトエラーとネットワークエラーを区別します。

var urlErr *url.Error
if errors.As(err, &urlErr) && urlErr.Timeout() {
    // handle timeout
}

リクエスト単位とクライアント単位のタイムアウト

Client.Timeout はすべてのリクエストに適用されます。コンテキストのタイムアウトはリクエスト単位で設定でき、クライアントのタイムアウトより短くすることもできます。両方が適用され、短い方が優先されます。

キープアライブの無効化

接続をほとんど開かない短時間実行のプログラムでは、トランスポートに DisableKeepAlives: true を設定すると、接続プールのオーバーヘッドを回避できます。

クイックチェック

http.Client.Timeout とコンテキストのタイムアウトの両方を設定した場合、どちらが有効になりますか?

振り返り:タイムアウトとヘッダー

主なポイント:

  • client.Timeout:リクエスト全体に対するタイムアウト
  • context.WithTimeout:キャンセル可能で、伝播するタイムアウト
  • カスタムヘッダーには req.Header.Set を使用
  • Transport:TLS、ダイヤル、アイドルのタイムアウトを細かく設定

よくある質問

「タイムアウトとヘッダーの設定」レッスンは無料ですか?

はい。「タイムアウトとヘッダーの設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「タイムアウトとヘッダーの設定」で何を学びますか?

クライアントのタイムアウト、カスタムヘッダー、認証トークン ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「タイムアウトとヘッダーの設定」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. HTTPリクエストの送信
  2. タイムアウトとヘッダーの設定
  3. JSONレスポンスのデコード
  4. エラー処理とリトライロジック
← Go Academyに戻る