Maison >développement back-end >Golang >Comment gérer et terminer en douceur le traitement des requêtes HTTP dans Go ?

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

Patricia Arquette
Patricia Arquetteoriginal
2024-11-20 19:05:17838parcourir

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

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

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

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
}

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