Go 言語では、http クライアントは非常に一般的に使用されるネットワーク リクエスト ライブラリです。ネットワーク リクエスト中、パフォーマンスを最適化しリソースを解放するために、リクエストの完了後に http クライアントを時間内に閉じる必要があることがよくあります。では、Go 言語で http クライアントを閉じるにはどうすればよいでしょうか?この記事ではhttpクライアントを終了する方法と注意点を紹介します。
HTTP クライアントを閉じる方法
Go 言語では、http クライアントを閉じるには、http クライアントの Close メソッドを呼び出します。 http クライアントの Close メソッドは、閉じられていない接続を含むすべての接続を解放します。一般に、リクエストが完了したらすぐに http クライアントの Close メソッドを呼び出してリソースを解放する必要があります。
サンプル コードは次のとおりです。
package main import ( "fmt" "net/http" ) func main() { client := http.Client{} req, _ := http.NewRequest("GET", "http://www.example.com", nil) resp, err := client.Do(req) if err != nil { fmt.Println("Error:", err) } defer resp.Body.Close() defer client.Close() fmt.Println(resp.Body) }
上記のサンプル コードでは、http クライアントを使用して GET リクエストを送信し、リクエストの完了後に http クライアントの Close メソッドを呼び出します。
注意事項
http クライアントを使用する場合は、次の点に注意する必要があります。
package main import ( "fmt" "net/http" ) func main() { transport := http.DefaultTransport.(*http.Transport).Clone() client := http.Client{Transport: transport} req1, _ := http.NewRequest("GET", "http://www.example.com", nil) resp1, err := client.Do(req1) if err != nil { fmt.Println("Error:", err) } req2, _ := http.NewRequest("GET", "http://www.example.com", nil) resp2, err := client.Do(req2) if err != nil { fmt.Println("Error:", err) } defer resp1.Body.Close() defer resp2.Body.Close() fmt.Println(resp1.Body) fmt.Println(resp2.Body) }
上記のサンプル コードでは、最初に http.DefaultTransport をコピーし、次に新しい http クライアントを作成しました。次に、2 つの GET リクエストをそれぞれ送信し、それぞれのレスポンスから本文を読み取りました。
package main import ( "fmt" "net/http" ) func main() { client := &http.Client{} respChan := make(chan *http.Response) get := func(url string) { req, _ := http.NewRequest("GET", url, nil) resp, _ := client.Do(req) defer resp.Body.Close() respChan <- resp } urls := []string{"http://www.example.com", "http://www.example.org", "http://www.example.net"} for _, url := range urls { go get(url) } for range urls { resp := <-respChan fmt.Println(resp.Body) } client.Close() }
上記のサンプル コードでは、3 つの GET リクエストを同時に送信しました。 respChan チャネルを使用して、各リクエストに対する応答を受信します。ループでは、respChan チャネルから各応答を読み取り、応答の本文を出力します。
結論
http クライアントを閉じることは非常に重要です。時間内に閉じないと、システム リソースが無駄に消費され、重大な問題が発生する可能性もあります。 http クライアントを使用する場合は、同時リクエストや、パフォーマンスの最適化とリソースの解放のための http クライアントの再利用など、いくつかの問題に注意する必要があります。 Go 言語では、http クライアントを閉じるには、Close メソッドを呼び出すだけです。
以上がgolang httpclientを閉じるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。