Heim > Backend-Entwicklung > Golang > Wie kann ich in Go zuverlässig prüfen, ob eine Anfrage storniert wurde?

Wie kann ich in Go zuverlässig prüfen, ob eine Anfrage storniert wurde?

Susan Sarandon
Freigeben: 2024-11-08 17:29:01
Original
802 Leute haben es durchsucht

How to Reliably Check for Request Cancellation in Go?

So prüfen Sie, ob eine Anfrage storniert wurde

In Go können Programmierer auf Situationen stoßen, in denen sie feststellen müssen, ob eine Anfrage storniert wurde. Die Verwendung des == context.Canceled-Vergleichs in Go 1.9 und früheren Versionen kann jedoch zu unerwarteten Ergebnissen führen.

Um genau zu prüfen, ob eine Anforderung abgebrochen wurde, sollten Sie die folgenden Ansätze in Betracht ziehen:

1. Nutzen Sie das context.Canceled-Fehlerobjekt:

In Go 1.13 und höher bietet das context.Canceled-Fehlerobjekt eine praktische Möglichkeit, den Abbruch zu überprüfen. Wenn ein Kontext abgebrochen wird, gibt jede darauf ausgeführte Operation diesen Fehler zurück. Der folgende Code demonstriert seine Verwendung:

// Create a context that is already canceled
ctx, cancel := context.WithCancel(context.Background())
cancel()

// Create the request with it and perform an operation
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)
_, err := http.DefaultClient.Do(r)

// Check if the error matches context.Canceled
if err == context.Canceled {
    // Request was canceled
}
Nach dem Login kopieren

2. Verwenden Sie die Funktion „errors.Is“:

Wenn Sie Go-Versionen vor 1.13 unterstützen müssen, können Sie die Funktion „errors.Is“ verwenden, um nach verschachtelten context.Canceled-Fehlern zu suchen. Mit „errors.Is“ können Sie die zugrunde liegende Fehlerkette untersuchen und feststellen, ob einer der Fehler einem bestimmten Fehlertyp entspricht.

// Create a context that is already canceled
ctx, cancel := context.WithCancel(context.Background())
cancel()

// Create the request with it and perform an operation
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)
_, err := http.DefaultClient.Do(r)

// Check if the error chain contains context.Canceled
if errors.Is(err, context.Canceled) {
    // Request was canceled
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich in Go zuverlässig prüfen, 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