gpt4 book ai didi

go - 是否有必要将模板放入 map 中以便在 Go 中重复使用?

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

要处理Web应用程序中的每一个请求,关于模板的正常代码是这样的:

t:= template.New("welcome")
t, _ = t.ParseFiles("welcome.tpl")
t.Execute(w, data)

我猜 ParseFiles 每次都花费很多。是否可以重复使用模板?所以我改进了它:

//templateMap := make(map[string][template])
//...
tplName :="welcome"
t := templateMap[tplName]
if t=nil{
t:= template.New(tplName )
t, _ = t.ParseFiles("welcome.tpl")
templateMap[tplName] = t
}

t.Execute(w, data)

我想知道通过将模板放入 map 或缓存来提高效率是否可行或可行?我还想知道 Execute 函数是否是线程安全的?

func (t *Template) Execute(wr io.Writer, data interface{}) (err 错误)

最佳答案

模板本身实际上可以充当模板映射。这是我的做法:

我声明了一个全局模板变量:

var t = template.New("master")

我实际上并没有使用“master”模板,除了作为其他模板的容器。

然后,我在应用启动时加载所有模板:

func init() {
_, err := t.ParseGlob("templates/*.html")
if err != nil {
log.Fatalln("Error loading templates:", err)
}
}

然后当我想使用其中一个模板时,我会按名称请求它:

t.ExecuteTemplate(w, "user.html", data)

关于go - 是否有必要将模板放入 map 中以便在 Go 中重复使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15352130/

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