ホームページ >バックエンド開発 >Golang >Golang で HTTP エラーを処理するにはどうすればよいですか?

Golang で HTTP エラーを処理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-03 10:15:57547ブラウズ

Golang での HTTP エラーの処理は、クライアント リクエストのさまざまなエラー条件に適切に応答するために重要です。エラーを処理するにはいくつかの方法があります。 組み込みのエラー タイプ (例: ErrBadRequest) を使用して、一般的な HTTP エラーを表します。カスタム エラー条件を処理するカスタム エラー タイプを作成します。 httputil.NewError 関数を使用して、ステータス コードとメッセージに基づいて新しいエラーを作成します。

如何在 Golang 中处理 HTTP 错误?

Golang で HTTP エラーを処理するにはどうすればよいですか?

Golang での HTTP エラーの処理は、クライアント リクエストのさまざまなエラー条件に適切に応答できるため、非常に重要です。 Golang には、組み込みの errors パッケージなど、エラーを処理するいくつかの方法が用意されています。 errors 包。

使用内置错误类型

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

import "net/http"

var (
    ErrBadRequest       = http.StatusBadRequest
    ErrUnauthorized     = http.StatusUnauthorized
    ErrForbidden        = http.StatusForbidden
    ErrNotFound         = http.StatusNotFound
    ErrMethodNotAllowed = http.StatusMethodNotAllowed
)

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

使用自定义错误类型

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

type MyError struct {
    code    int
    message string
}

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

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

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

    // ... 继续处理请求
}

使用 httputil.NewError

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

組み込みエラー タイプを使用する

Golang には、一般的な HTTP エラーを表すために、次のような組み込みエラー タイプがいくつか用意されています。

err := httputil.NewError(http.StatusBadRequest, "Bad Request")
これらのエラー タイプは、特定のエラー状態を表すためにクライアントに返すために使用できます。

カスタム エラー タイプを使用する

カスタム エラー条件を処理する必要がある場合は、独自のエラー タイプを作成できます:

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

その後、ハンドラー関数でこのカスタム エラーを返すことができます: 🎜
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
    }

    // ... 继续处理请求
}
🎜 httputil を使用します。 NewError🎜🎜net/http/httputil パッケージは、指定されたステータス コードとエラー メッセージに基づいて新しい を作成できる <code>NewError 関数を提供します。 code>error: 🎜rrreee🎜実際的なケース🎜🎜🎜例 1: 組み込みエラー タイプの使用🎜🎜rrreee🎜🎜例 2: カスタム エラー タイプの使用🎜🎜🎜

以上がGolang で HTTP エラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。