猿问

其他包中未定义 html/template 类型的 Golang 全局变量

我之前在我的主包中声明了全局变量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:未定义


我意识到还有其他类似的问题,但答案并没有解决我的问题。我究竟做错了什么?


慕娘9325324
浏览 105回答 2
2回答

有只小跳蛙

tmpl从另一个包中看不到。要从其他包中导入变量,您必须通过完全限定名称引用它们,并让变量以大写字母开头,pack.Tmpl等等。也不可能将变量从导入main到其他包中。

萧十郎

这是我用于在帮助程序包中声明模板的解决方案:package helpersimport (    "html/template"    "log")// Tmpl global template varvar Tmpl = template.New("master")func init() {    _, err := Tmpl.ParseGlob("templates/*.html")    if err != nil {        log.Fatalln("Error loading templates:", err)    }}然后在我的控制器包中:package controllersimport (        "myapp/helpers")someFunc() {.... helpers.Tmpl.ExecuteTemplate(w, "header.html", nil)....} 
随时随地看视频慕课网APP

相关分类

Go
我要回答