Heim >Backend-Entwicklung >Golang >Wie kann man Fehler bei der Verarbeitung von Go-HTTP-Anfragen ordnungsgemäß behandeln und zurückgeben?

Wie kann man Fehler bei der Verarbeitung von Go-HTTP-Anfragen ordnungsgemäß behandeln und zurückgeben?

Linda Hamilton
Linda HamiltonOriginal
2024-11-27 06:50:12777Durchsuche

How to Gracefully Handle and Return Errors in Go HTTP Request Handling?

Beenden einer HTTP-Anfrage mit Fehlerbehandlung

Bei der Entwicklung von API-Diensten mit HTTP in Go kann es erforderlich sein, eine Anfrage abzubrechen und zurückzugeben eine Fehlermeldung, wenn bestimmte Bedingungen nicht erfüllt sind. Um dies zu erreichen, kann die Methode ServeHTTP() effektiv verwendet werden.

Rückkehr von ServeHTTP()

Um eine HTTP-Anfrage zu beenden, kehren Sie von der Methode ServeHTTP() zurück . Dadurch wird die Anfrage angehalten und eine Antwort kann über fmt.Fprint(w, str) oder ähnliche Methoden gesendet werden. Zum Beispiel:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})

HTTP-Fehlercodes

In Fällen, in denen die Eingabeparameter ungültig sind, wird stattdessen ein HTTP-Fehlercode (z. B. 400 für Bad Request) gesendet Der Standardwert 200 OK wird empfohlen. Zu diesem Zweck kann die Funktion http.Error() verwendet werden:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        http.Error(w, "Invalid input params!", http.StatusBadRequest) 
        return
    }

    // Do normal API serving
})

JSON-Daten mit einem Fehlercode zurückgeben

Um JSON-Daten zusammen mit einem zurückzusenden Fehlercode kann die Header().Set()-Methode zum Festlegen des Content-Type-Headers und die WriteHeader()-Methode zum Festlegen des HTTP-Status verwendet werden Code:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Examine incoming params
    if !ok {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest) 
        str := `{"Result":"","Error":"No valide Var"}`
        fmt.Fprint(w, str)
        return
    }

    // Do normal API serving
})

Propagating Returning

Wenn der Fehler außerhalb von ServeHTTP() erkannt wird, muss der Fehlerstatus weitergegeben werden, damit ServeHTTP() zurückkehren kann. Ein einfacher Ansatz besteht darin, den Fehler von der inneren Funktion zurückzugeben, wodurch auch die Methode ServeHTTP() zurückgegeben wird. Zum Beispiel mit einem benutzerdefinierten Parametertyp:

type params struct {
    // fields for your params 
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    // decode params; if they are invalid, return an error:

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

    // If everything goes well:
    return p, nil
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, `Invalid input params!`, http.StatusBadRequest)
        return
    }

    // Do normal API serving
})

Durch die Verwendung dieser Ansätze können Sie HTTP-Anfragen effektiv beenden und bei Bedarf aussagekräftige Fehlermeldungen zurückgeben, um sicherzustellen, dass Ihre API-Dienste ungültige Eingaben ordnungsgemäß verarbeiten und Fehlerbedingungen kommunizieren wie vorgesehen.

Das obige ist der detaillierte Inhalt vonWie kann man Fehler bei der Verarbeitung von Go-HTTP-Anfragen ordnungsgemäß behandeln und zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn