Heim  >  Artikel  >  Backend-Entwicklung  >  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
Susan SarandonOriginal
2024-11-08 17:29:01764Durchsuche

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
}

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
}

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!

Stellungnahme:
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