Vue+GIN前后端分离项目打包成二进制

问题

使用GIN自带静态资源服务器需要设置一个子目录,而这对于Vue项目来说显然是不合理的,如果使用根目录则会和其他路由冲突,所以需要对静态资源针对性处理

原理

阅读更多

将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
}
阅读更多