Golang Echo框架实现API统一返回格式

Golang的Echo框架中,上下文echo.Context是一个接口,可以通过它重写默认的Context.JSON方法来自定义返回格式

首先定义一下接口的格式

1
2
3
4
type CommonResponse struct {
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
阅读更多

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

关于Golang随机数生成重复数字

最近在尝试用Golang写一个随机图API,但是关于随机数的生成产生了一些问题

原来的代码是这样的

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
func findImage(s string) []byte {
imageList := make([]string, 0)
//遍历目录
err := filepath.Walk(s,
func(p string, f os.FileInfo, err error) error {
if f == nil {
return nil
}
if f.IsDir() {
return nil
}
ext := path.Ext(f.Name())
if ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".gif" {
imageList = append(imageList, p)
}
return nil
})
if err != nil {
log.Fatal("in finding img ", err)
}
//返回随机图片
r := rand.New(rand.NewSource(time.Now().Unix()))
i := r.Intn(len(imageList))
img := imageList[i]
b, err := ioutil.ReadFile(img)
if err != nil {
log.Fatal("in opening img ", err)
}
return b
}
阅读更多