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

时间:2019-02-03 00:51:02

标签: go

我已经按照问题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:未定义

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

2 个答案:

答案 0 :(得分:2)

tmpl在另一个包中将不可见。要从其他包中导入变量,您必须使用完全限定的名称来引用它们,并使变量以大写字母pack.Tmpl等开头。

同样不可能将变量从main导入其他软件包。

答案 1 :(得分:0)

这是我用于在帮助程序包中声明模板的解决方案:

$(document).ready(function() {

  $('#selection').on('change', function() {
    change($(this).val());
  });

});


function change(sourceUrl) {
  var audio = document.getElementById("player");
  var source = document.getElementById("mp3_src");

  audio.pause();

  if (sourceUrl) {
    source.src = sourceUrl;
    audio.load();
    audio.play();
  }
}

然后在我的控制器包:

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)
    }
}