一种选择是实现http.FileSystem使用http.Dir。这种方法的优点是它利用了http.FileServer中精心编写的代码。
它看起来像这样:
type HTMLDir struct { d http.Dir}func main() { fs := http.FileServer(HTMLDir{http.Dir("public/")}) http.Handle("/", http.StripPrefix("/", fs)) http.ListenAndServe(":8000", nil)}Open方法的实现取决于应用程序需求。
如果您始终想使用.html扩展名,请使用以下代码:
func (d HTMLDir) Open(name string) (http.File, error) { return d.d.Open(name + ".html")}如果要回退到.html扩展名,请使用以下代码:
func (d HTMLDir) Open(name string) (http.File, error) { // Try name as supplied f, err := d.d.Open(name) if os.IsNotExist(err) { // Not found, try with .html if f, err := d.d.Open(name + ".html"); err == nil { return f, nil } } return f, err}翻转前一个以.html扩展名开头,然后回退到提供的名称:
func (d HTMLDir) Open(name string) (http.File, error) { // Try name with added extension f, err := d.d.Open(name + ".html") if os.IsNotExist(err) { // Not found, try again with name as supplied. if f, err := d.d.Open(name); err == nil { return f, nil } } return f, err}


