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!") }
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!") }
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!