ホームページ ハンドラーを維持しながらルートから静的コンテンツを提供する
Golang では、ルート ディレクトリから静的コンテンツを提供し、専用のメソッドでホームページを処理します
従来、単純な Web サーバーは http.HandleFunc を使用して、次のようにホームページ ハンドラーを登録します:
http.HandleFunc("/", HomeHandler)
ただし、http.Handle を使用してルート ディレクトリから静的コンテンツを提供しようとすると、「/」の重複登録によりパニックが発生します。
代替アプローチ: 明示的なルート ファイルを提供する
1 つの解決策は、次の使用を避けることです。 http.ServeMux を使用し、代わりにルート ディレクトリ内の各ファイルを明示的に提供します。このアプローチは、sitemap.xml、favicon.ico、robots.txt などの必須のルートベースのファイルに適しています。
package main import ( "fmt" "net/http" ) func HomeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "HomeHandler") } func serveSingle(pattern string, filename string) { http.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filename) }) } func main() { http.HandleFunc("/", HomeHandler) // homepage // Mandatory root-based resources serveSingle("/sitemap.xml", "./sitemap.xml") serveSingle("/favicon.ico", "./favicon.ico") serveSingle("/robots.txt", "./robots.txt") // Normal resources http.Handle("/static", http.FileServer(http.Dir("./static/"))) http.ListenAndServe(":8080", nil) }
このアプローチにより、他のリソースに対して、特定のルートベースのファイルのみが明示的に提供されます。サブディレクトリに移動し、http.FileServer ミドルウェア経由で提供できます。
以上がGo でルート ディレクトリとホームページ ハンドラーから静的コンテンツを提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。