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

HTTP ルーターで 404 エラーをカスタム処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 11:39:30621ブラウズ

How to Custom Handle 404 Errors with HTTP Router?

HTTP ルーターによる 404 の処理

HTTP ルーター ライブラリは、API 開発用の堅牢なルーティング機能を提供します。一般的なタスクの 1 つは、404 (Not Found) 応答の処理です。ドキュメントではカスタム 404 ハンドラーを定義できる可能性について簡単に説明されていますが、実装の詳細は混乱を招く可能性があります。

カスタム ハンドラー インターフェイスについて

httprouter.Router 構造体には以下が含まれます。 NotFound という名前のフィールド。これは http.Handler インターフェイスです。このインターフェイスは、ResponseWriter と Request を引数として受け取る単一のメソッド ServeHTTP() を定義します。

カスタム 404 ハンドラーの作成

カスタム 404 ハンドラーを作成するには、ServeHTTP() メソッド シグネチャを持つ関数を定義し、http.HandlerFunc() ヘルパー関数を使用してそれを http.Handler 値に変換します。

実装例:

<code class="go">func MyNotFound(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/plain; charset=utf-8")
    w.WriteHeader(http.StatusNotFound) // StatusNotFound = 404
    w.Write([]byte("My own Not Found handler."))
    w.Write([]byte(" The page you requested could not be found."))
}</code>

カスタム ハンドラーの設定

次に、カスタム ハンドラーを HTTP Router オブジェクトの NotFound フィールドに割り当てます。

<code class="go">router := httprouter.New()
router.NotFound = http.HandlerFunc(MyNotFound)</code>

Manualカスタム ハンドラーの呼び出し

別の HTTP ハンドラー内からカスタム 404 ハンドラーを手動で呼び出す必要がある場合は、ResponseWriter と Request を渡すことで実行できます:

<code class="go">func ResourceHandler(w http.ResponseWriter, r *http.Request) {
    exists := ... // Check for resource existence
    if !exists {
        MyNotFound(w, r) // Pass ResponseWriter and Request
        return
    }

    // Resource exists, serve it
    // ...
}</code>

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

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