Maison > développement back-end > Golang > Comment détecter l'annulation d'une demande dans Go ?

Comment détecter l'annulation d'une demande dans Go ?

DDD
Libérer: 2024-11-07 18:23:02
original
540 Les gens l'ont consulté

How to Detect Request Cancellation in Go?

Détection de l'annulation d'une demande dans Go

Dans Go, vérifier si une requête HTTP a été annulée peut se faire de plusieurs manières. L'extrait de code fournissait des tentatives pour vérifier l'annulation en inspectant l'erreur renvoyée par http.DefaultClient.Do(), mais il enregistre de manière inattendue false.

Solution pour Go 1.13

Pour les versions Go 1.13 et supérieures, l’approche recommandée consiste à exploiter la fonction error.Is. Cette fonction vous permet de vérifier si une erreur correspond à un type spécifique, y compris les erreurs du package de contexte.

// 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!")
}
Copier après la connexion

Dans ce cas, error.Is déterminera avec précision que l'erreur provient du contexte annulé, confirmant ainsi que la demande a bien été annulée.

Approche alternative

Avant Go 1.13, vous pouvez utiliser une combinaison de grpc.ErrorDesc et context.Err() pour vérifier l'annulation :

// 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!")
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal