Golang では、ホームページを提供するためのルート ディレクトリ ハンドラを保持しながら、ルート ディレクトリから静的コンテンツを提供するにはどうすればよいですか。
例として、次の単純な Web サーバーを使用します。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", HomeHandler) // homepage
http.ListenAndServe(":8080", nil)
}
func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "HomeHandler")
}
私が行った場合
http.Handle("/", http.FileServer(http.Dir("./")))
「/」に 2 つの登録があるというパニックが発生します。私がインターネットで見つけたすべての Golang の例は、静的コンテンツを異なるディレクトリから提供することを提案していますが、それは、sitemap.xml、favicon.ico、robots.txt などの慣習的または慣習的なファイルにはあまり役に立ちません。常にルートから提供されることが義務付けられています。
私が求めている動作は、Apache、Nginx、または IIS などのほとんどの Web サーバーで見られる動作であり、最初にルールをトラバースし、ルールが見つからない場合は実際のファイルを探し、ファイルが見つからない場合はそれを探します。 404s。私の推測では、a を書く代わりに、拡張子を持つファイルを参照しているかどうかをチェックhttp.HandlerFunc
する a を書く必要があり、http.Handler
そうであればファイルの存在をチェックしてファイルを提供し、それ以外の場合は 404 またはホームページを提供する必要があります。 "/"。残念ながら、そのようなタスクを開始する方法さえわかりません。
私の一部は、状況を非常に複雑にしすぎて、何かが欠けていると思わせると言っていますか? 任意のガイダンスをいただければ幸いです。