Heim > Backend-Entwicklung > Golang > Wie überprüfe ich in Go, ob eine Anfrage storniert wurde?

Wie überprüfe ich in Go, ob eine Anfrage storniert wurde?

Mary-Kate Olsen
Freigeben: 2024-11-08 08:55:02
Original
499 Leute haben es durchsucht

How to Check for Request Cancellation in Go?

Überprüfung auf Anforderungsstornierung in Go

In Go ist die Überprüfung, ob eine Anforderung storniert wurde, für die ordnungsgemäße Abwicklung asynchroner Vorgänge unerlässlich. Eine einfache Lösung besteht darin, den Kontext der Anfrage zu überwachen, der Abbruchsignale enthält.

Betrachten Sie den folgenden Code:

package main

import (
    "context"
    "log"
    "net/http"
)

func main() {
    r, _ := http.NewRequest("GET", "http://example.com", nil)
    ctx, cancel := context.WithCancel(context.Background())
    r = r.WithContext(ctx)
    ch := make(chan bool)
    go func() {
        _, err := http.DefaultClient.Do(r)
        log.Println(err == context.Canceled)
        ch <- true
    }()
    cancel()
    <-ch
}
Nach dem Login kopieren

Dieser Code versucht, den Abbruch der Anfrage zu ermitteln, indem er den von Do( ) mit context.Canceled. In Go 1.9 wird jedoch überraschenderweise „false“ statt „true“ ausgegeben.

Korrekter Ansatz

Für Go-Versionen vor 1.13 besteht die geeignete Methode zur Überprüfung auf Stornierung darin Verwenden Sie context.Err() und vergleichen Sie seinen Rückgabewert mit context.Canceled:

if r.Context().Err() == context.Canceled {
    // Request was cancelled
}
Nach dem Login kopieren

Go 1.13

In Go 1.13 und höher wurde die Prüfung auf Abbruch gleichmäßig komfortabler mit der Einführung der Funktion „errors.Is()“. Mit dieser Funktion können Sie überprüfen, ob ein Fehler mit einem anderen Fehlertyp übereinstimmt, auch wenn er in mehrere Ebenen eingebettet ist:

if errors.Is(err, context.Canceled) {
    // Request was cancelled
}
Nach dem Login kopieren

Diese Methode gewährleistet eine genaue Abbrucherkennung, selbst wenn andere Fehler in den Kontext eingebettet sind.Abgebrochen.

Das obige ist der detaillierte Inhalt vonWie überprüfe ich in Go, ob eine Anfrage storniert wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage