Gin中如何自定义Model

一、关于 Model

如果我们的应用非常简单的话,我们可以在 Controller 里面处理常见的业务逻辑。但是如果
我们有一个功能想在多个控制器、或者多个模板里面复用的话,那么我们就可以把公共的功
能单独抽取出来作为一个模块( Model )。 Model 是逐步抽象的过程,一般我们会在 Model
里面封装一些公共的方法让不同 Controller 使用,也可以在 Model 中实现和数据库打交道。

Model 里面封装公共的方法

新建 models/ tools.go

复制代码
package models
import ( "crypto/md5"
"fmt"
"time"
"github.com/astaxie/beego"
)
//时间戳间戳转换成日期
func UnixToDate(timestamp int) string {
t := time.Unix(int64(timestamp), 0)
return t.Format("2006-01-02 15:04:05")
}
//日期转换成时间戳 2020-05-02 15:04:05
func DateToUnix(str string) int64 {
template := "2006-01-02 15:04:05"
t, err := time.ParseInLocation(template, str, time.Local)
if err != nil {
return 0
}
return t.Unix()
}
func GetUnix() int64 {
return time.Now().Unix()
}
func GetDate() string {
template := "2006-01-02 15:04:05"
return time.Now().Format(template)
}
func GetDay() string {
template := "20060102"
return time.Now().Format(template)
}
func Md5(str string) string {
data := []byte(str)
return fmt.Sprintf("%x\n", md5.Sum(data))
}

、控制器中调用****Model

复制代码
package controllers
import ( "gin_demo/models"
)
day := models.GetDay()

四、 调用Model注册全局模板函数
models/tools.go

// 时间戳间戳转换成日期

复制代码
func UnixToDate(timestamp int64) string {
t := time.Unix(timestamp, 0)
return t.Format("2006-01-02 15:04:05")
}

main.go

// 注册全局模板函数 注意顺序,注册模板函数需要在加载模板上面

复制代码
r := gin.Default()
r.SetFuncMap(template.FuncMap{ "unixToDate": models.UnixToDate, })

控制器

复制代码
func (c UserController) Add(ctx *gin.Context) {
ctx.HTML(http.StatusOK, "admin/user/add.html", gin.H{ "now": models.GetUnix(), })
}

模板

复制代码
<h2>{{.now | unixToDate}}</h2>

五、 Golang Md5****加密
打开 golang 包对应的网站: https://pkg.go.dev/ ,搜索 md5

方法一:

复制代码
data := []byte("123456")
has := md5.Sum(data)
md5str := fmt.Sprintf("%x", has)
fmt.Println(md5str)

方法二:

复制代码
h := md5.New()
io.WriteString(h, "123456")
fmt.Printf("%x\n", h.Sum(nil))

还没学会的话也可以看看大地老师Gin教程中如何自定义Model的详细讲解。

Gin教程 Gin框架中自定义Model

相关推荐
不会聊天真君6475 小时前
介绍(gin笔记第一期)
笔记·gin
ZHENGZJM1 天前
Server-Sent Events (SSE) 接口实现
架构·go·gin
ZHENGZJM1 天前
统一响应封装与 API 错误处理
react.js·go·gin
ZHENGZJM1 天前
仓库抓取与内容提取
go·gin
GDAL3 天前
gin.H 深入全面讲解
gin·h
呆萌很3 天前
【Gin】参数处理练习题
gin
GDAL3 天前
gin.Default() 深入全面讲解
golang·go·gin
GDAL4 天前
为什么选择gin?
golang·gin
ZHENGZJM8 天前
Gin 鉴权中间件设计与实现
中间件·gin
ZHENGZJM8 天前
认证增强:图形验证码、邮箱验证与账户安全
安全·react.js·go·gin