一种选择是实现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
}
本文介绍了如何利用http.FileSystem和http.Dir来创建一个简单的HTTP文件服务器。通过自定义Open方法处理.html扩展名,可以实现根据需求选择是否强制使用.html后缀或者尝试回退到原始名称。这种方法利用了http.FileServer的内置功能,简化了代码实现。


被折叠的 条评论
为什么被折叠?



