Go 言語でのタイムアウト管理のベスト プラクティス http.Transport
はじめに:
Go 言語を使用してネットワーク リクエストを行う場合、リクエストとリソースのブロックを避けるためにタイムアウトを合理的に設定することが非常に重要です無駄の。この記事では、Go 言語でのタイムアウト管理に http.Transport を使用するベスト プラクティスを紹介し、参考用のサンプル コードをいくつか紹介します。
タイムアウトの設定:
http.Transport を使用してリクエストを送信する前に、いくつかのメソッドを使用してリクエストのタイムアウトを設定できます。たとえば、http.Client
構造の Timeout
フィールドを使用して、リクエスト全体のタイムアウトを設定できます。たとえば、次のようになります。
client := &http.Client{ Timeout: time.Second * 10, // 设置超时时间为10秒 }
上記のコードでは、 , Timeout
フィールドは、リクエスト全体のタイムアウトが 10 秒であることを示します。リクエストの処理時間が 10 秒を超えると、リクエストは net.DialTimeout
エラーを返します。
さらに、http.Transport## を使用してリクエストを送信する前に、
http.Request の
Timeout を使用することもできます。 # 単一リクエストのタイムアウトを設定するフィールド。例:
req, err := http.NewRequest("GET", "http://example.com", nil) if err != nil { log.Fatal(err) } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", "MyClient/1.0") req.Timeout = time.Second * 5 // 设置单个请求的超时时间为5秒 resp, err := client.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body))上記のコードでは、
req.Timeout を通じて 1 つのリクエストのタイムアウトを 5 秒に設定します。リクエストの処理時間が 5 秒を超えると、リクエストは
net.DialTimeout エラーが返されます。
リクエストがタイムアウトした場合、このエラーを合理的に処理する必要があります。一般的な方法は、
context パッケージを使用してリクエストのタイムアウトを制御することです。タイムアウトを指定した
context.Context を作成し、それをリクエストの
http.Request に渡すことができます。例:
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) defer cancel() req, err := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil) if err != nil { log.Fatal(err) }上記のコードでは、
context.WithTimeout を通じて 10 秒のタイムアウトを持つ
context.Context を作成し、
http を使用します。 .NewRequestWithContext は
Context をリクエストに渡します。
context.Context を使用してタイムアウト イベントを監視できます。例:
resp, err := client.Do(req.WithContext(ctx)) if err != nil { if err == context.DeadlineExceeded { log.Println("请求超时") return } log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body))上記のコードでは、リクエストのタイムアウトが発生すると、エラーの種類が
context.DeadlineExceeded であるかどうかを判断してタイムアウト イベントを処理します。タイムアウト イベントの場合は、エラー情報を返す、リクエストを再試行するなど、対応する処理操作を実行できます。
Go 言語を使用してネットワーク リクエストを行う場合、適切なタイムアウトを設定することが非常に重要です。この記事では、Go 言語で http.Transport を使用したタイムアウト管理のベスト プラクティスを紹介し、いくつかのサンプル コードを提供します。タイムアウトを適切に設定し、context.Context を使用してタイムアウト イベントを監視することにより、リクエストのタイムアウトをより適切に管理し、プログラムの安定性と信頼性を向上させることができます。
以上がGo 言語 http.Transport でのタイムアウト管理のベスト プラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。