Maison > développement back-end > Golang > le corps du texte

Comment vérifier de manière fiable l'annulation d'une demande dans Go ?

Susan Sarandon
Libérer: 2024-11-08 17:29:01
original
762 Les gens l'ont consulté

How to Reliably Check for Request Cancellation in Go?

Comment vérifier l'annulation d'une demande

Dans Go, les programmeurs peuvent rencontrer des scénarios dans lesquels ils doivent déterminer si une demande a été annulée. Cependant, l'utilisation de la comparaison == context.Canceled dans Go 1.9 et versions antérieures peut donner des résultats inattendus.

Pour vérifier avec précision l'annulation de la demande, envisagez les approches suivantes :

1. Utilisez l'objet d'erreur context.Canceled :

Dans Go 1.13 et versions ultérieures, l'objet d'erreur context.Canceled fournit un moyen pratique de vérifier l'annulation. Lorsqu'un contexte est annulé, toute opération effectuée sur celui-ci renverra cette erreur. Le code suivant démontre son utilisation :

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

2. Utilisez la fonction error.Is :

Si vous devez prendre en charge les versions Go antérieures à 1.13, vous pouvez utiliser la fonction error.Is pour vérifier les erreurs context.Canceled imbriquées. error.Is vous permet d'inspecter la chaîne d'erreurs sous-jacente et de déterminer si l'une des erreurs correspond à un type d'erreur spécifié.

// 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
}
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal