[インデックス 11247] ファイルの概要
このコミットは、Go言語の標準ライブラリ net/http
パッケージ内の Client
構造体のドキュメンテーションを更新するものです。具体的には、Client
の Transport
フィールドと CheckRedirect
フィールドに関するコメントがより詳細かつ明確になるように修正されています。
コミット
commit f44304ee634ce8f97a0000b72dafba4fdbdf46b1
Author: Brad Fitzpatrick <bradfitz@golang.org>
Date: Wed Jan 18 19:05:53 2012 -0800
net/http: update the Client docs a bit
R=golang-dev, dsymonds, adg
CC=golang-dev
https://golang.org/cl/5557058
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/f44304ee634ce8f97a0000b72dafba4fdbdf46b1
元コミット内容
net/http: update the Client docs a bit
変更の背景
このコミットの背景は、net/http
パッケージの Client
構造体に関するドキュメンテーションの明確化と改善です。特に、Client
の Transport
フィールドと CheckRedirect
フィールドの役割と動作について、より詳細な説明が必要とされたため、ドキュメントが更新されました。これにより、Client
を利用する開発者がこれらの重要なフィールドの挙動を正確に理解し、適切に利用できるようになることが目的です。
前提知識の解説
Go言語の net/http
パッケージ
net/http
パッケージは、Go言語でHTTPクライアントおよびサーバーを実装するための標準ライブラリです。このパッケージは、HTTPリクエストの送信、レスポンスの受信、HTTPサーバーの構築など、HTTP通信に関する基本的な機能を提供します。
http.Client
構造体
http.Client
は、HTTPリクエストを送信し、HTTPレスポンスを受信するための高レベルなインターフェースを提供する構造体です。クッキー、リダイレクト、コネクションプーリングなどの詳細を自動的に処理します。Client
インスタンスは、内部状態(キャッシュされたTCPコネクションなど)を持つため、必要に応じて作成するのではなく、再利用することが推奨されます。また、複数のゴルーチンによる並行利用に対しても安全です。
RoundTripper
インターフェース
RoundTripper
は、単一のHTTPトランザクション(リクエストの送信とレスポンスの受信)を実行するためのメカニズムを定義するインターフェースです。その定義は以下の通りです。
type RoundTripper interface {
RoundTrip(*Request) (*Response, error)
}
RoundTrip
メソッドは *http.Request
を受け取り、*http.Response
とエラーを返します。これは実際のHTTP通信を行うコアコンポーネントであり、http.Client
はその Transport
フィールド(http.RoundTripper
型)を使用してリクエストを実行します。
- 目的: HTTP通信の実際の処理を担当します。
- デフォルト実装:
http.Client
のTransport
フィールドがnil
の場合、http.DefaultTransport
が使用されます。これは、コネクションプーリング、プロキシ処理、TLS設定を含む標準的なHTTP/HTTPSトランスポートを提供します。 - カスタマイズとミドルウェア:
RoundTripper
インターフェースは、HTTPリクエストにカスタムロジック(ミドルウェア)を実装するために非常に重要です。デフォルトのトランスポートや他のカスタムRoundTripper
をラップすることで、以下のようなことが可能です。- リクエストが送信される前に変更を加える(例: ヘッダーの追加、ロギング)。
- レスポンスが受信された後に検査または変更を加える(例: ロギング、エラーハンドリング)。
- リトライ、キャッシング、認証などの機能を実装する。
CheckRedirect
フィールド
http.Client
の CheckRedirect
フィールドは、クライアントのリダイレクトポリシーを制御する関数です。そのシグネチャは以下の通りです。
CheckRedirect func(req *Request, via []*Request) error
この関数は、HTTPリダイレクトレスポンス(例: 301, 302, 303, 307, 308)が受信された後に呼び出されます。
-
req
: リダイレクトターゲットに送信される新しいRequest
。 -
via
: 現在のreq
を除く、リダイレクトチェーンで既に行われたリクエストを表す*Request
オブジェクトのスライス。 -
目的: リダイレクトの処理にカスタムロジックを定義できます。
CheckRedirect
がnil
を返すと、クライアントはリダイレクトに従います。CheckRedirect
がエラーを返すと、クライアントはリダイレクトの追跡を停止し、そのエラーが呼び出し元に返されます。- 特殊なケース:
CheckRedirect
がhttp.ErrUseLastResponse
を返すと、クライアントはリダイレクトの追跡を停止しますが、受信した最新の*http.Response
(リダイレクトレスポンス自体)をnil
エラーとともに返し、リダイレクトレスポンスを検査できるようにします。
-
デフォルトの挙動:
CheckRedirect
がnil
の場合、http.Client
はデフォルトポリシーを使用し、最大10回連続でリダイレクトを自動的に追跡します。
技術的詳細
このコミットは、net/http/client.go
ファイル内の Client
構造体の定義におけるコメントを修正しています。
変更前は、Transport
フィールドのコメントが簡潔で、Client
全体に対する一般的なコメントとして「Client is not yet very configurable.」という記述がありました。
変更後では、Transport
フィールドのコメントがより詳細になり、その役割が明確に記述されています。
// Transport specifies the mechanism by which individual
// HTTP requests are made.
// If nil, DefaultTransport is used.
これにより、Transport
が個々のHTTPリクエストを行うメカニズムを定義し、nil
の場合は DefaultTransport
が使用されることが明示されます。
また、CheckRedirect
フィールドに対するコメントが追加され、その役割が明確に説明されています。
// CheckRedirect specifies the policy for handling redirects.
// If CheckRedirect is not nil, the client calls it before
// following an HTTP redirect. The arguments req and via
// are the upcoming request and the requests made already,
これにより、CheckRedirect
がリダイレクト処理のポリシーを定義し、nil
でない場合にクライアントがリダイレクトを追跡する前に呼び出されること、そして req
と via
引数の意味が説明されています。
これらの変更は、コードの動作自体を変更するものではなく、コードの可読性と理解度を向上させるためのドキュメンテーションの改善です。特に、Client
構造体の重要な設定ポイントである Transport
と CheckRedirect
について、開発者がより正確な情報を得られるようになります。
コアとなるコードの変更箇所
diff --git a/src/pkg/net/http/client.go b/src/pkg/net/http/client.go
index 3d36f30e32..1d70672695 100644
--- a/src/pkg/net/http/client.go
+++ b/src/pkg/net/http/client.go
@@ -24,11 +24,13 @@ import (
// The Client's Transport typically has internal state (cached
// TCP connections), so Clients should be reused instead of created as
// needed. Clients are safe for concurrent use by multiple goroutines.
-//
-// Client is not yet very configurable.
type Client struct {
- Transport RoundTripper // if nil, DefaultTransport is used
+ // Transport specifies the mechanism by which individual
+ // HTTP requests are made.
+ // If nil, DefaultTransport is used.
+ Transport RoundTripper
+ // CheckRedirect specifies the policy for handling redirects.
// If CheckRedirect is not nil, the client calls it before
// following an HTTP redirect. The arguments req and via
// are the upcoming request and the requests made already,
コアとなるコードの解説
このコミットでは、src/pkg/net/http/client.go
ファイル内の http.Client
構造体の定義が変更されています。
-
Transport
フィールドのコメントの変更:- 変更前:
Transport RoundTripper // if nil, DefaultTransport is used
- 変更後:
// Transport specifies the mechanism by which individual // HTTP requests are made. // If nil, DefaultTransport is used. Transport RoundTripper
これにより、
Transport
フィールドの役割がより詳細に説明されています。単に「nilの場合DefaultTransportが使われる」という情報だけでなく、「個々のHTTPリクエストが行われるメカニズムを指定する」という本質的な役割が明記されました。 - 変更前:
-
Client
構造体全体のコメントの削除:- 変更前には
Client is not yet very configurable.
というコメントがありましたが、これは削除されました。これは、Goの進化とともにClient
がより設定可能になったことを示唆しているか、あるいはこのコメントが特定のフィールドのドキュメントとしては適切でないと判断されたためと考えられます。
- 変更前には
-
CheckRedirect
フィールドのコメントの追加:- 変更前には
CheckRedirect
フィールドに対するコメントがありませんでした。 - 変更後:
// CheckRedirect specifies the policy for handling redirects. // If CheckRedirect is not nil, the client calls it before // following an HTTP redirect. The arguments req and via // are the upcoming request and the requests made already,
この追加により、
CheckRedirect
フィールドの目的と動作が明確に説明されています。リダイレクト処理のポリシーを定義し、リダイレクトを追跡する前に呼び出されること、そしてコールバック関数に渡される引数req
とvia
の意味が示されています。 - 変更前には
これらの変更は、http.Client
のAPIドキュメンテーションを改善し、開発者がこれらの重要な設定オプションをより効果的に利用できるようにすることを目的としています。
関連リンク
- Go CL 5557058: https://golang.org/cl/5557058
参考にした情報源リンク
- Go
net/http
パッケージドキュメント: https://pkg.go.dev/net/http http.Client
のRoundTripper
とCheckRedirect
に関する解説記事:- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQFJp5q0tNDWab0iL0HjluPx9ReDVM8m2frrSEcX87YOE8mfGylfiYojfFpbwPz7QaOG_a_xnMKBmCfGUFIA6F_ALhaU9AYvjdQl_oTus3DSvX3fXYAYzp4j0d3zUAH_h1IXMwInwwvhFQyuRt6II8zyua131xYGYD0D-7OKZEgWfLie
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQE9C6vBevmjyPLiEBFfF6-wbUCG59kG9yGjUZSuZAEue6EMPw0bilgL-9o-55xJ09qWPejaHRtBS8clow1Lnu5h_nNWaso2-pUc77_lARX0YS_j-G2a2aeMx1oo57iGYfCKPec1UBm6rOIXU0IcjNq9QhGPFBUfqvCWFg==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG2bdAjlmWBmDmiM4Ta1mo_obj7dBRW0siojiKGtuL4Nmj0niQRiQt6orw9BliYIBBmIyIB_7r4gL-RWM7fkGwUe9oz51qRce9UFMZb0sZThD9ivAwriM67CHMl0DVUywzJAkXCSAt2ZQOqr22OyQauh9mL
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGa3c6zyOzmU17Z69UYvskKjikw_xucD2tfdpuFYTgmgptUMQa1k344KN_Mwgvth_nw3C2Q8tTAw8nV37V8cikJjAGwqt9OjPsFka1Ov89XjEyCsoVnJTBx2lr89ww8MJ9Wyx4WbYi7JJyFsop3z1qWg9b_XiUp9IY24AxiWfc=
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQEOG0-to49-CKFwPRCmLWYDAJN-MSIkuSNIhQSZ5Syr2xERkPKP6IjAtJU3AnagUsI05sDCO3cP2wgWw4Qi9-MPTZXa_dUIMUL31LPpPzcgGSIhqmBlEA==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQG6BcCFB-CYE6Veu_suGa11bt1kmoemUReyemyXgq8DK-mBMPbF8uMSJXJTTOcly9JC9XJPW3AeeHpmqs3jh1egvM1-FTRxWGIrvas5iC0XHvsEwARCGVd3XrDEOqDNwSlL77XPAFCLRoMNMfc4hQQ3ezta_ez-LtLM9KKa_KxYVg==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQGj8iTGI8PeLsHOos7U68pcBftIlXCbpqlVqNSl-shQMaWCNMzZgMWu7_P_zBE1_f81TgLlm9ZvVq2oCWiqLkNf5X7rTjpsoBXITViQ38pPeNuIqPw0ckX11GzTXtCYxeKJYKvBrHYLoGfONsojAnUyssOo4D4p9uKAVQRLx4rOJRM8RqTUaadHdd0_HY_pG2VdGhCXchLpQ==
- https://vertexaisearch.cloud.google.com/grounding-api-redirect/AUZIYQHDE-sEZGEo0RGoaNHghxAAoOS7v4ZLERUptpXNqvu4tVFKqRGyBy0Gi8TdakQt_KfT_-qWr-BlkUxQvxrFE_ROBfdieZx3pZx4LQ08HpiNPlAL0GySfdHMsAiCvjgYKZG2Y-U7YArHao3ZurqgV2VsysY3QYGD4kOysrIPmrhS6l3Kx5rzWLsBZffL3JAEH4UysfBgkqdczCDlRRRASrOeg78XlBu711letiFr