首頁  >  文章  >  後端開發  >  GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?

GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?

Patricia Arquette
Patricia Arquette原創
2024-10-30 14:34:50900瀏覽

Does GoLang's `http.DefaultClient.Do(req)` Automatically Retry HTTP Requests on Server Unavailability?

HTTP 請求重試機制

問題:

在GoLangang 中,執行GoLang DefaultClient 時.Do(req),如果伺服器暫時不可用,HTTP請求嘗試是否會自動重試?

答案:

否,GoLang HTTP客戶端沒有實現自動重試重試。您需要實作自訂重試機制來處理伺服器不可用的情況。

重試模式實現:

以下是您可以實現的基本重試模式的範例:

<code class="go">package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    var (
        err      error
        response *http.Response
        retries  int = 3
    )

    for retries > 0 {
        response, err = http.Get("https://non-existent") // Replace with your server URL

        if err != nil {
            log.Println("Request failed", err)
            retries -= 1
        } else {
            break // Request succeeded, exit the retry loop
        }
    }

    if response != nil {
        defer response.Body.Close()
        data, err := ioutil.ReadAll(response.Body)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Data received: %s", data)
    } else {
        log.Fatal("Unable to establish connection")
    }
}</code>

在此範例中, http.Get 請求在循環中執行,嘗試從伺服器取得資料。如果請求失敗,循環將減少重試計數並繼續,直到所有重試都用盡或請求成功。如果請求成功,則列印回應。如果所有重試都失敗,則會記錄錯誤訊息。

以上是GoLang 的 `http.DefaultClient.Do(req)` 是否會在伺服器無法使用時自動重試 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn