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!