Heim >Backend-Entwicklung >Golang >Wie erkennt man die Stornierung einer Anfrage in Go?

Wie erkennt man die Stornierung einer Anfrage in Go?

DDD
DDDOriginal
2024-11-07 18:23:02526Durchsuche

How to Detect Request Cancellation in Go?

Anforderungsabbruch in Go erkennen

In Go kann die Überprüfung, ob eine HTTP-Anfrage abgebrochen wurde, auf verschiedene Arten erfolgen. Das bereitgestellte Code-Snippet versucht, den Abbruch zu überprüfen, indem es den von http.DefaultClient.Do() zurückgegebenen Fehler untersucht, aber es wird unerwarteterweise „falsch“ protokolliert.

Lösung für Go 1.13

Für Go-Versionen 1.13 und höher besteht der empfohlene Ansatz darin, die Funktion „errors.Is“ zu nutzen. Mit dieser Funktion können Sie überprüfen, ob ein Fehler mit einem bestimmten Typ übereinstimmt, einschließlich Fehlern aus dem Kontextpaket.

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

// Create a request with the canceled context
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)

// Attempt the request, which will fail immediately due to the canceled context
_, err := http.DefaultClient.Do(r)

// Validate the error's origin using errors.Is
if errors.Is(err, context.Canceled) {
    fmt.Println("Request canceled!")
}

In diesem Fall stellterrors.Is genau fest, dass der Fehler aus dem abgebrochenen Kontext stammt, und bestätigt dies dass die Anfrage tatsächlich abgebrochen wurde.

Alternativer Ansatz

Vor Go 1.13 können Sie eine Kombination aus grpc.ErrorDesc und context.Err() verwenden, um den Abbruch zu überprüfen :

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

// Create a request with the canceled context
r, _ := http.NewRequestWithContext(ctx, "GET", "http://example.com", nil)

// Attempt the request, which will fail immediately due to the canceled context
_, err := http.DefaultClient.Do(r)

// Check for a canceled context error
if grpc.ErrorDesc(err) == context.Canceled {
    fmt.Println("Request canceled!")
}

Das obige ist der detaillierte Inhalt vonWie erkennt man die Stornierung einer Anfrage in Go?. 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