gpt4 book ai didi

http - GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件

转载 作者:行者123 更新时间:2023-12-05 04:30:44 25 4
gpt4 key购买 nike

func main() {
mux := http.NewServeMux()
staticHandler := http.FileServer(http.Dir("./templates"))
mux.Handle("/", http.StripPrefix("/", staticHandler))
log.Fatal(http.ListenAndServe(":8080", mux))
}

我想加载一个位于"template"目录中的 html 文件。如果"template"中有多个文件,如何选择要加载的文件?

最佳答案

您可以使用http.ServeFile() 构建您自己的文件服务器。

见下图。

然后您可以在您的自定义 fileHandler.ServeHTTP() 中拦截提供的文件。

package main

import (
"log"
"net/http"
"path"
"path/filepath"
"strings"
)

func main() {
mux := http.NewServeMux()

//staticHandler := http.FileServer(http.Dir("./templates"))
staticHandler := fileServer("./templates")

mux.Handle("/", http.StripPrefix("/", staticHandler))
log.Printf("listening")
log.Fatal(http.ListenAndServe(":8080", mux))
}

// returns custom file server
func fileServer(root string) http.Handler {
return &fileHandler{root}
}

// custom file server
type fileHandler struct {
root string
}

func (f *fileHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
upath := r.URL.Path
if !strings.HasPrefix(upath, "/") {
upath = "/" + upath
r.URL.Path = upath
}
name := filepath.Join(f.root, path.Clean(upath))
log.Printf("fileHandler.ServeHTTP: path=%s", name)
http.ServeFile(w, r, name)
}

关于http - GOLANG 如何使用 http.FileServer 从模板目录加载某个 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71977451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com