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

Comment gérer et terminer en douceur le traitement des requêtes HTTP dans Go ?

Patricia Arquette
Libérer: 2024-11-20 19:05:17
original
755 Les gens l'ont consulté

How to Gracefully Handle and Terminate HTTP Request Processing in Go?

Terminer le traitement des requêtes HTTP

Lors du traitement des requêtes HTTP, il peut y avoir des scénarios dans lesquels il devient nécessaire de mettre fin au traitement et d'envoyer une réponse d'erreur . Ceci peut être réalisé en revenant de la méthode ServeHTTP().

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        str := `{"Result":"","Error":"Invalid Parameters"}`
        fmt.Fprint(w, str)
        return
    }

    // Continue normal API processing
})
Copier après la connexion

Utilisation des codes d'erreur HTTP

Pour une gestion des erreurs plus sophistiquée, il est recommandé de renvoyer un Code d'erreur HTTP au lieu du 200 OK par défaut.

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        http.Error(w, "Invalid Parameters", http.StatusBadRequest)
        return
    }

    // Continue normal API processing
})
Copier après la connexion

Réponses d'erreur au format JSON

Pour fournir une réponse d'erreur plus détaillée au format JSON :

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Inspect incoming parameters
    if !IsValid(r.URL.Query()) {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        str := `{"Result":"","Error":"Invalid Parameters"}`
        fmt.Fprint(w, str)
        return
    }

    // Continue normal API processing
})
Copier après la connexion

Propagation des erreurs à partir de fonctions imbriquées

Si la gestion des erreurs est effectuée dans une fonction appelée depuis ServeHTTP(), l'état d'erreur doit être renvoyé pour permettre à ServeHTTP() de se terminer le traitement de la demande :

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // Decode parameters and check their validity

    if !ok {
        return nil, errors.New("Invalid Parameters")
    }

    return p, nil
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // Continue normal API processing
}
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