将GIN的模板资源嵌入二进制

利用statik库将静态资源嵌入二进制,但是GIN并没有提供从http.FileSystem加载模板的方法,所以得手动去加载

主要实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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方法加载模板

1
2
r := gin.Default()
r.SetHTMLTemplate(initTemplates())

将GIN的模板资源嵌入二进制

https://jktu.cc/将GIN的模板资源嵌入二进制/

作者

udp_bbr

发布于

2020-11-14

更新于

2020-11-14

许可协议