我已经按照问题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:未定义
我意识到还有其他类似的问题,但是答案并没有解决我的问题。我在做什么错了?
答案 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)
}
}