Heim > Backend-Entwicklung > Golang > Fordern Sie Timeout-Einstellungen und Best Practices für http.Transport in der Go-Sprache an

Fordern Sie Timeout-Einstellungen und Best Practices für http.Transport in der Go-Sprache an

王林
Freigeben: 2023-07-22 16:13:13
Original
1800 Leute haben es durchsucht

Anforderungs-Timeout-Einstellungen und Best Practices für http.Transport in der Go-Sprache

In der Go-Sprache ist http.Transport eine wichtige Netzwerkanforderungsbibliothek. Es bietet eine Reihe von Methoden und Optionen zum Festlegen des Anforderungszeitlimits, um Entwicklern dabei zu helfen, die Ausführungszeit von Anforderungen besser zu kontrollieren und Ressourcenverschwendung zu vermeiden. In diesem Artikel wird erläutert, wie Sie Zeitüberschreitungen für Anfragen festlegen, und es werden einige Beispielcodes für Best Practices aufgeführt.

Timeout-Einstellungsmethode

In http.Transport können Sie die folgenden zwei Methoden verwenden, um den Timeout-Zeitraum der Anfrage festzulegen:

  1. Verwenden Sie das Timeout-Feld.

Timeout ist ein Feld von http.Transport vom Typ Zeit .Dauer. Durch die Einstellung von Timeout können Sie das Timeout für die gesamte Anfrage festlegen, einschließlich aller Prozesse wie Verbindungsaufbau, Senden einer Anfrage und Empfangen einer Antwort. Ein Beispiel ist wie folgt:

package main

import (
    "net/http"
    "time"
)

func main() {
    transport := &http.Transport{
        // 设置请求超时时间为5秒
        Timeout: 5 * time.Second,
    }

    client := &http.Client{
        Transport: transport,
    }

    resp, err := client.Get("http://example.com")
    if err != nil {
        // 处理错误
        return
    }

    // 处理响应
    defer resp.Body.Close()
}
Nach dem Login kopieren
  1. Verwendung des Feldes Deadline

Deadline ist ein Feld von http.Request, der Typ ist time.Time. Durch Festlegen der Frist können Sie ein unabhängiges Timeout für eine einzelne Anfrage festlegen. Beispiele sind wie folgt:

package main

import (
    "net/http"
    "time"
)

func main() {
    req, err := http.NewRequest("GET", "http://example.com", nil)
    if err != nil {
        // 处理错误
        return
    }

    // 设置请求超时时间为5秒
    req.Header.Set("Timeout", "5s")
    req = req.WithContext(http.TimeoutContext(req.Context(), 5*time.Second))

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        // 处理错误
        return
    }

    // 处理响应
    defer resp.Body.Close()
}
Nach dem Login kopieren

Best Practices

In der tatsächlichen Entwicklung müssen wir das Anforderungszeitlimit entsprechend spezifischer Szenarien und Anforderungen festlegen. Hier ist Beispielcode für einige Best Practices:

  1. Legen Sie ein globales Standard-Timeout fest.

Sie können ein globales Standard-Timeout für alle Anforderungen in Ihrer Anwendung festlegen. Dies verbessert die Lesbarkeit und Wartbarkeit des Codes. Beispiele sind wie folgt:

package main

import (
    "net/http"
    "time"
)

var client = &http.Client{
    Transport: &http.Transport{
        // 设置全局默认超时时间为10秒
        Timeout: 10 * time.Second,
    },
}

func main() {
    resp, err := client.Get("http://example.com")
    if err != nil {
        // 处理错误
        return
    }

    // 处理响应
    defer resp.Body.Close()
}
Nach dem Login kopieren
  1. Verschiedene Zeitüberschreitungen festlegen

Für unterschiedliche Anforderungen können Sie unterschiedliche Zeitüberschreitungen festlegen. Beispielsweise kann das Timeout für verschiedene API-Schnittstellen entsprechend den Eigenschaften der Schnittstelle und den Anforderungen an die Antwortzeit festgelegt werden. Ein Beispiel ist wie folgt:

package main

import (
    "net/http"
    "time"
)

func main() {
    apiA := &http.Client{
        Transport: &http.Transport{
            // 设置API A的超时时间为3秒
            Timeout: 3 * time.Second,
        },
    }

    apiB := &http.Client{
        Transport: &http.Transport{
            // 设置API B的超时时间为5秒
            Timeout: 5 * time.Second,
        },
    }

    respA, err := apiA.Get("http://apiA.example.com")
    if err != nil {
        // 处理错误
        return
    }

    respB, err := apiB.Get("http://apiB.example.com")
    if err != nil {
        // 处理错误
        return
    }

    // 处理响应
    defer respA.Body.Close()
    defer respB.Body.Close()
}
Nach dem Login kopieren

Zusammenfassung

Dieser Artikel stellt vor, wie man das Anforderungszeitlimit von http.Transport in der Go-Sprache festlegt, und gibt einige Best-Practice-Beispielcodes. In der tatsächlichen Entwicklung kann die flexible Einstellung des Anforderungszeitlimits entsprechend spezifischer Anforderungen und Szenarien die Leistung und Zuverlässigkeit der Anwendung verbessern.

Das obige ist der detaillierte Inhalt vonFordern Sie Timeout-Einstellungen und Best Practices für http.Transport in der Go-Sprache an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage