gpt4 book ai didi

golang 在指定路径返回静态 html 文件

转载 作者:IT王子 更新时间:2023-10-29 01:26:46 25 4
gpt4 key购买 nike

我正在使用 go 开发一个简单的待办事项应用。

我已经确定除了用户的待办事项列表之外的所有页面都可以安全地成为静态 html 页面。* 登录表单* 新的账户表格* 讨论待办事项应用程序的索引页

我认为目前没有理由将它们作为 go 模板。

我的问题是(在 go 中,不使用 nginx 之类的东西)如何设置静态 html 以最有效地返回特定路径?

例如 index.html 在“/”处返回

我知道我可以这样做:

func GetNewAccount(res http.ResponseWriter, req *http.Request) {
body, _ := ioutil.ReadFile("templates/register.html")
fmt.Fprint(res, string(body))
}

var register, _ = string(ioutil.ReadFile("templates/register.html"))
func GetNewAccount(res http.ResponseWriter, req *http.Request) {
fmt.Fprint(res, register)
}

对我来说,这些似乎是做一些看似简单的事情的更迂回的方法。

最佳答案

如果你所有的静态文件都在同一棵树下,你可以使用http.FileServer :

http.Handle("/s/", http.StripPrefix("/s/", http.FileServer(http.Dir("/path/to/static/files/"))))

否则将您想要的 html 文件预加载到 func init() 中的 map 中,然后根据请求的路径使一个处理程序 fmt.Fprint 它们应该可以工作.

简单静态文件处理程序的示例:

func StaticFilesHandler(path, prefix, suffix string) func(w http.ResponseWriter, req *http.Request) {
files, err := filepath.Glob(filepath.Join(path, "*", suffix))
if err != nil {
panic(err)
}
m := make(map[string][]byte, len(files))
for _, fn := range files {
if data, err := ioutil.ReadFile(fn); err == nil {
fn = strings.TrimPrefix(fn, path)
fn = strings.TrimSuffix(fn, suffix)
m[fn] = data
} else {
panic(err)
}
}
return func(w http.ResponseWriter, req *http.Request) {
path := strings.TrimPrefix(req.URL.Path, prefix)
if data := m[path]; data != nil {
fmt.Fprint(w, data)
} else {
http.NotFound(w, req)
}
}
}

然后你可以像这样使用它:

http.Handle("/s/", StaticFilesHandler("/path/to/static/files", "/s/", ".html"))

关于golang 在指定路径返回静态 html 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24480423/

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