Maison  >  Article  >  développement back-end  >  Comment vérifier de manière fiable l'annulation d'une demande dans Go ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-08 17:29:01763parcourir

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
}

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
}

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!

Déclaration:
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