为了处理Web应用程序中的每个请求,有关模板的普通代码如下所示:
t:= template.New("welcome") t, _ = t.ParseFiles("welcome.tpl") t.Execute(w, data)
我想ParseFiles每次都花很多钱。是否可以重复使用模板?因此,我对此进行了改进:
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)
我想知道通过将模板放入地图或缓存来提高效率是否可行或可行?我也想知道函数 Execute是否是线程安全的?
Execute
func (t *Template) Execute(wr io.Writer, data interface{}) (err error)
模板本身实际上可以充当模板的映射。这是我的工作:
我声明一个全局模板变量:
var t = template.New("master")
除了用作其他模板的容器之外,我实际上没有使用“主”模板。
然后,在我的应用启动时加载所有模板:
func init() { _, err := t.ParseGlob("templates/*.html") if err != nil { log.Fatalln("Error loading templates:", err) } }
然后,当我想使用其中一个模板时,请按名称要求:
t.ExecuteTemplate(w, "user.html", data)