将GIN的模板资源嵌入二进制
利用statik
库将静态资源嵌入二进制,但是GIN并没有提供从http.FileSystem
加载模板的方法,所以得手动去加载
主要实现
func initTemplates() *template.Template {
statikFS, err := fs.New()
if err != nil {
log.Fatal(err)
}
t := template.New("")
//找出所有扩展名为.gohtml的文件,将其解析为模板
err = fs.Walk(statikFS, config.TemplateDir, func(path string, info os.FileInfo, err error) error {
if filepath.Ext(info.Name()) == ".gohtml" {
f, err := statikFS.Open(path)
if err != nil {
return err
}
b, err := ioutil.ReadAll(f)
if err != nil {
return err
}
_, err = t.New(path[1:]).Parse(string(b)) //此处去掉 path 前的 / 来作为模板的文件名
if err != nil {
return err
}
}
return nil
})
if err != nil {
log.Println("Load templates error")
log.Fatal(err)
}
return t
}
之后可以通过SetHTMLTemplate方法加载模板
r := gin.Default()
r.SetHTMLTemplate(initTemplates())