Go のルートからホームページと静的コンテンツを提供する
Go では、特定の処理を行いながらルート ディレクトリから静的コンテンツとホームページの両方を提供しますURL には、カスタマイズされたアプローチが必要です。デフォルトでは、ルート パス (「/」) のハンドラーを登録すると、同じディレクトリから静的コンテンツを提供することと競合します。
これに対処するには、次のオプションの 1 つは、次のファイル サーバーの存在をチェックする代替の FileServer 実装を使用することです。ファイルを提供する前に、ファイルを保存してください。ファイルが存在しない場合は、ホームページ ハンドラーに従うか、404 エラーを返すことができます。
次のコードは、このアプローチを示しています。
package main import ( "fmt" "net/http" "os" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func exists(path string) bool { _, err := os.Stat(path) return !os.IsNotExist(err) } func FileServerWithFallback(dir string) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { path := dir + r.URL.Path if exists(path) { http.ServeFile(w, r, path) return } } } func main() { http.HandleFunc("/", HomeHandler) // homepage http.Handle("/static/", FileServerWithFallback("./static")) http.ListenAndServe(":8080", nil) }
このコードでは、exists 関数は、ファイルが存在するかどうかを確認します。ファイルが指定されたパスに存在します。 FileServerWithFallback ハンドラーは、指定されたディレクトリにファイルが存在する場合、ファイルを提供します。それ以外の場合、リクエストはホームページ ハンドラーに進むことができます。
このカスタマイズされた FileServer 実装を使用すると、静的コンテンツをルート ディレクトリから提供しながら、ホームページ ハンドラーを期待どおりに呼び出すことができます。
以上がGo のルート ディレクトリからホームページと静的コンテンツの両方を提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。