ホームページ > バックエンド開発 > Golang > Go の標準 HTTP パッケージにカスタム 404 エラー ページを実装するにはどうすればよいですか?

Go の標準 HTTP パッケージにカスタム 404 エラー ページを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-28 08:59:17
オリジナル
884 人が閲覧しました

How to Implement a Custom 404 Error Page in Go's Standard HTTP Package?

標準 HTTP パッケージでカスタム 404 エラー ページを表示する

HTTP サーバーは通常、ユーザーが存在しない URL をリクエストすると、基本的な「404 ページが見つかりません」エラー メッセージを表示します。 。より有益なエクスペリエンスやカスタマイズされたエクスペリエンスを提供するには、カスタム エラー ページ ハンドラーを実装する必要があります。

Go の標準 HTTP パッケージには、処理されないすべてのリクエストを処理し、カスタム エラー ページを表示するメカニズムが存在します。 。これを実現する方法を詳しく見てみましょう。

カスタム エラー ハンドラー関数

カスタム エラー ページを処理する関数を作成します。この関数は 3 つの引数を取ります:

  • w (http.ResponseWriter): カスタム エラー ページの送信に使用される応答ライター。
  • r (*http.Request): 存在しないリクエストオブジェクトURL.
  • status (int): エラーのステータス コード (通常は http.StatusNotFound)。
func errorHandler(w http.ResponseWriter, r *http.Request, status int) {
    // Set the HTTP status code.
    w.WriteHeader(status)
    // Customize the error response for specific status codes.
    if status == http.StatusNotFound {
        fmt.Fprint(w, "Custom 404 error message")
    }
}
ログイン後にコピー

カスタム エラーの設定Handler

エラー ハンドラー関数は、 HTTPサーバー。これは、指定されたポートでサーバーを起動する http.ListenAndServe 関数で行われます。

http.ListenAndServe(":12345", nil)
ログイン後にコピー

nil を、すべてのリクエストを処理するカスタム HTTP リクエスト ハンドラーに置き換えます。

http.ListenAndServe(":12345", new(http.ServeMux))
ログイン後にコピー

ServeMux で、特定の URL の元のルート ハンドラーを追加します。

mux := http.NewServeMux()
mux.HandleFunc("/smth/", smthHandler)
mux.HandleFunc("/", homeHandler)

http.ListenAndServe(":12345", mux)
ログイン後にコピー

最後に、 NotFoundHandler を ServeMux に渡して、特定のルート ハンドラーによって処理されない他のすべての URL を処理します。

mux.NotFoundHandler = http.HandlerFunc(errorHandler)
ログイン後にコピー

サンプル コード

上記のアプローチを実装する完全なサンプル コードは次のとおりです。次のように:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/smth/", smthHandler)
    mux.HandleFunc("/", homeHandler)
    mux.NotFoundHandler = http.HandlerFunc(errorHandler)

    http.ListenAndServe(":12345", mux)
}

func smthHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/smth/" {
        errorHandler(w, r, http.StatusNotFound)
        return
    }
    fmt.Fprint(w, "Welcome to smth")
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        errorHandler(w, r, http.StatusNotFound)
        return
    }
    fmt.Fprint(w, "Welcome home")
}

func errorHandler(w http.ResponseWriter, r *http.Request, status int) {
    w.WriteHeader(status)
    if status == http.StatusNotFound {
        fmt.Fprint(w, "Custom 404 error message")
    }
}
ログイン後にコピー

このコードは、特定の URL のルート ハンドラーを定義します。 (/smth/ および /) を割り当て、他のすべての未処理リクエストを処理するカスタム エラー ハンドラー関数 (errorHandler) を割り当てます。ユーザーが存在しない URL にアクセスしようとすると、デフォルトの「404 ページが見つかりません」メッセージの代わりにカスタム 404 エラー ページが表示されます。

以上がGo の標準 HTTP パッケージにカスタム 404 エラー ページを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート