要处理Web应用程序中的每个请求,有关模板的常规代码如下所示:
t:= template.New("welcome")
t, _ = t.ParseFiles("welcome.tpl")
t.Execute(w, data)
Run Code Online (Sandbox Code Playgroud)
我想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)
Run Code Online (Sandbox Code Playgroud)
我想通过将模板放入地图或缓存来提高效率是可行的还是可行的?我也想知道函数 Execute是否是线程安全的?
func (t *Template) Execute(wr io.Writer, data interface{}) (err error)
and*_*olm 13
模板实际上可以作为模板的映射.这是我做的:
我声明了一个全局模板变量:
var t = template.New("master")
Run Code Online (Sandbox Code Playgroud)
我实际上并没有使用"主"模板,除了作为其他模板的容器.
然后,我在应用启动时加载所有模板:
func init() {
_, err := t.ParseGlob("templates/*.html")
if err != nil {
log.Fatalln("Error loading templates:", err)
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当我想使用其中一个模板时,我会按名称要求:
t.ExecuteTemplate(w, "user.html", data)
Run Code Online (Sandbox Code Playgroud)