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

Comment gérer les erreurs HTTP dans Golang ?

WBOY
Libérer: 2024-06-03 10:15:57
original
517 Les gens l'ont consulté

La gestion des erreurs HTTP dans Golang est cruciale afin de répondre avec élégance aux diverses conditions d'erreur dans les requêtes des clients. Il existe plusieurs manières de gérer les erreurs : Utilisez des types d'erreur intégrés (par exemple : ErrBadRequest) pour représenter les erreurs HTTP courantes. Créez des types d'erreur personnalisés pour gérer les conditions d'erreur personnalisées. Utilisez la fonction httputil.NewError pour créer une nouvelle erreur basée sur le code d'état et le message.

如何在 Golang 中处理 HTTP 错误?

Comment gérer les erreurs HTTP dans Golang ?

La gestion des erreurs HTTP dans Golang est très importante car elle vous permet de répondre avec élégance à diverses conditions d'erreur dans les requêtes des clients. Golang propose plusieurs façons de gérer les erreurs, y compris le package erreurs intégré. errors 包。

使用内置错误类型

Golang 提供了几个内置的错误类型来表示常见的 HTTP 错误,例如:

import "net/http"

var (
    ErrBadRequest       = http.StatusBadRequest
    ErrUnauthorized     = http.StatusUnauthorized
    ErrForbidden        = http.StatusForbidden
    ErrNotFound         = http.StatusNotFound
    ErrMethodNotAllowed = http.StatusMethodNotAllowed
)
Copier après la connexion

这些错误类型可以用来返回给客户端,表示特定的错误情况。

使用自定义错误类型

如果你需要处理自定义的错误情况,你可以创建自己的错误类型:

type MyError struct {
    code    int
    message string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("code: %d, message: %s", e.code, e.message)
}
Copier après la connexion

然后你可以在处理函数中返回这个自定义错误:

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    if err := validateRequest(r); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // ... 继续处理请求
}
Copier après la connexion

使用 httputil.NewError

net/http/httputil 包提供了 NewError 函数,它可以根据给定的状态码和错误消息创建一个新的 error

Utiliser des types d'erreur intégrés

Golang fournit plusieurs types d'erreur intégrés pour représenter les erreurs HTTP courantes, telles que :

err := httputil.NewError(http.StatusBadRequest, "Bad Request")
Copier après la connexion
Ces types d'erreur peuvent être utilisés pour revenir au client pour représenter des conditions d'erreur spécifiques.

Utilisez un type d'erreur personnalisé

Si vous devez gérer des conditions d'erreur personnalisées, vous pouvez créer votre propre type d'erreur :

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    case "GET":
        // ... 处理 GET 请求
    case "POST":
        // ... 处理 POST 请求
    default:
        http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
    }
}
Copier après la connexion

Ensuite, vous pouvez renvoyer cette erreur personnalisée dans la fonction de gestionnaire : 🎜
type InvalidRequestError struct {
    message string
}

func (e InvalidRequestError) Error() string {
    return fmt.Sprintf("invalid request: %s", e.message)
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    if err := validateRequest(r); err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    // ... 继续处理请求
}
Copier après la connexion
🎜Utilisez httputil. Le package NewError🎜🎜net/http/httputil fournit la fonction NewError, qui peut créer un nouveau basé sur le code d'état et le message d'erreur donnés. code>erreur : 🎜rrreee🎜Cas pratique🎜🎜🎜Exemple 1 : Utiliser des types d'erreur intégrés🎜🎜rrreee🎜🎜Exemple 2 : Utiliser des types d'erreur personnalisés🎜🎜rrreee

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal