[解決済み] 標準の http パッケージでカスタム 404 エラーページを表示する
2023-08-08 10:53:03
質問
あると仮定して
http.HandleFunc("/smth", smthPage)
http.HandleFunc("/", homePage)
ユーザーが間違ったURLを試したとき、プレーンな "404 page not found" が表示されます。この場合、どのようにカスタムページを返せばよいのでしょうか?
gorilla/muxに関するアップデート
純粋なnet/httpパッケージを使用している場合は、受理された回答でOKです。
gorilla/muxを使用している場合は、このようなものを使用する必要があります。
func main() {
r := mux.NewRouter()
r.NotFoundHandler = http.HandlerFunc(notFound)
}
そして、実装は
func notFound(w http.ResponseWriter, r *http.Request)
を好きなように実装してください。
どのように解決するのですか?
いつもはこうしています。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", homeHandler)
http.HandleFunc("/smth/", smthHandler)
http.ListenAndServe(":12345", nil)
}
func homeHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
errorHandler(w, r, http.StatusNotFound)
return
}
fmt.Fprint(w, "welcome home")
}
func smthHandler(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/smth/" {
errorHandler(w, r, http.StatusNotFound)
return
}
fmt.Fprint(w, "welcome smth")
}
func errorHandler(w http.ResponseWriter, r *http.Request, status int) {
w.WriteHeader(status)
if status == http.StatusNotFound {
fmt.Fprint(w, "custom 404")
}
}
ここでは、カスタム404だけを表示するようにコードを簡略化していますが、実際にはこのセットアップでもっと多くのことを行っています。すべての HTTP エラーを
errorHandler
ですべての HTTP エラーを処理し、その中で有用な情報を記録し、自分自身にメールを送信しています。
関連
-
[解決済み] go get でパッケージをインストールするにはどうしたらいいですか?
-
[解決済み] メインパッケージに複数のファイルがあるプロジェクトを「go run」するにはどうしたらいいですか?
-
[解決済み] Go の http パッケージで、POST リクエストのクエリ文字列を取得するにはどうすればよいですか?
-
[解決済み] response.Bodyを閉じないとどうなりますか?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] 現在時刻に時・分・秒を足す
-
[解決済み] golangのスライスで要素を検索する方法
-
[解決済み] Goでマップをクリアするには?
-
[解決済み] Go 言語で実行時に変数の型をチェックする方法
-
ドット括弧」構文の意味を教えてください。[重複しています]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] GoのToString()関数
-
[解決済み] ゴルーチンからの戻り値をキャッチする
-
[解決済み] golangでISO 8601の時刻を変換するには?
-
[解決済み] 複数のゴルーチンが1つのチャンネルをリッスンする
-
[解決済み] チャネルバッファサイズとは何ですか?
-
[解決済み] 標準入力から整数を読み込む
-
[解決済み] ソースツリー全体に対するgo fmt
-
[解決済み] Go で / に異なるメソッドの http リクエストを処理するにはどうすればよいですか?
-
[解決済み] Go でローカル IP アドレスを取得するにはどうしたらいいですか?
-
[解決済み] Goで複数のコマンドをパイプでつなぐには?