我已经声明了一个全局变量在这个问题Is it necessary to put templates into a map for reusing in Go?建议
我宣布我的func main()
前主包中的全局变量,但它仍然不是另一个包声明。
package main
import{
"html/template"
.....
)
var tmpl = template.New("master")
func main() {
func init() {
_, err := tmpl.ParseGlob("templates/*.html")
if err != nil {
log.Fatalln("Error loading templates:", err)
}
....
}
在另一个包我写一个函数里面:
tmpl.ExecuteTemplate(w, "venue-index.html", res)
但我得到一个错误
TMPL:未定义
我意识到,还有其他类似的问题,但答案还没有解决我的问题。我究竟做错了什么?
tmpl
将无法从另一个包可见。从其他包导入变量您必须通过一个完全合格的名称来指代他们有变量开始以一个大写字母,pack.Tmpl
等。
此外,它是不可能的,从进口变量main
到其他包。
这是我用的辅助包装声明模板的解决方案:
package helpers
import (
"html/template"
"log"
)
// Tmpl global template var
var Tmpl = template.New("master")
func init() {
_, err := Tmpl.ParseGlob("templates/*.html")
if err != nil {
log.Fatalln("Error loading templates:", err)
}
}
然后在我的控制器包装:
package controllers
import (
"myapp/helpers"
)
someFunc() {
....
helpers.Tmpl.ExecuteTemplate(w, "header.html", nil)
....
}