基于Gin封装的Web框架如何更改日期格式以及如何进行加密(MD5)
创始人
2025-05-31 13:38:12
0

在登陆系统中我们我们时常要去校验密码是否正确,而数据库中的密码是密文形式在Gin中我们需要自行去进行封装一个MD5加密的方法

在我们的框架(原来封装过得)中app/Common.go

// MD5 加密
func MD5(v string) string {d := []byte(v)m := md5.New()m.Write(d)return hex.EncodeToString(m.Sum(nil))
}

之后在逻辑层进行调用就ok

在展示数据的时候,gorm虽然可以自动帮你维护 created_at、updated_at、deleted_at这些关键时间字段,但是时间格式展示出来是

读取到的时间字段往往是这样:"2022-07-03T22:14:02.973528+08:00",带着时区和毫秒。不是我们想要得在这里我用两种方法来解决

a、返回的时间戳详解golang gorm中格式化时间问题 - 编程宝库 (codebaoku.com)

在服务层进行书写 app/service

import (
"time"
//"strconv"
"fmt"
"database/sql/driver"
"strconv"
)
type LocalTime struct {
time.Time
}
func (t LocalTime) MarshalJSON() ([]byte, error) {
//格式化秒
seconds := t.Unix()
return []byte(strconv.FormatInt(seconds, 10)), nil
}
func (t LocalTime) Value() (driver.Value, error) {
var zeroTime time.Time
if t.Time.UnixNano() == zeroTime.UnixNano() {
return nil, nil
}
return t.Time, nil
}
func (t *LocalTime) Scan(v interface{}) error {
value, ok := v.(time.Time)
if ok {
*t = LocalTime{Time: value}
return nil
}
return fmt.Errorf("can not convert %v to timestamp", v)
}

b、正常返回年月日时分秒GO项目实战 — Gorm格式化时间字段 - Go语言中文网 - Golang中文社区 (studygolang.com)

可以使用自带的sql.NullTime

可以自定义支持的时间格式

import ("database/sql""database/sql/driver""time"
)const (YYYY_MM_DD          = "2006-01-02"YYYY_MM_DD_HH_MM_SS = "2006-01-02 15:04:05"
)type WrapTime sql.NullTimefunc (t *WrapTime) UnmarshalJSON(data []byte) (err error) {if string(data) == "null" {t.Valid = falsereturn nil}var now time.Timeif len(string(data)) == len(YYYY_MM_DD)+2 {now, err = time.ParseInLocation(`"`+YYYY_MM_DD+`"`, string(data), time.Local)t.Valid = truet.Time = now} else {now, err = time.ParseInLocation(`"`+YYYY_MM_DD_HH_MM_SS+`"`, string(data), time.Local)t.Valid = truet.Time = now}return
}func (t WrapTime) MarshalJSON() ([]byte, error) {if !t.Valid {return []byte("null"), nil}b := make([]byte, 0, len(YYYY_MM_DD_HH_MM_SS)+2)b = append(b, '"')b = t.Time.AppendFormat(b, YYYY_MM_DD_HH_MM_SS)b = append(b, '"')return b, nil
}func (t WrapTime) String() string {if !t.Valid {return "null"}return t.Time.Format(YYYY_MM_DD_HH_MM_SS)
}// Value insert timestamp into mysql need this function.
func (t WrapTime) Value() (driver.Value, error) {if !t.Valid {return nil, nil}return t.Time, nil
}// Scan value time.Time
func (t *WrapTime) Scan(v interface{}) error {return (*sql.NullTime)(t).Scan(v)
}func NewWrapTime(t time.Time) WrapTime {if t.IsZero() {return WrapTime{Valid: false}}return WrapTime{Valid: true, Time: t}
}

models层数据格式需要修正 引入需要与上面app/service 定义的一致

希望对大家有帮助

相关内容

热门资讯

越来越多的中国人,为什么要戴呼... 前不久,“黄磊戴呼吸机睡觉”话题冲上热搜。黄磊戴呼吸机睡觉 来源:《向往的生活》原来,黄磊长期受打鼾...
芯联集成赵奇:构筑三条增长曲线... 中经记者 孙汝祥 夏欣 北京报道“感恩科创成长层,为‘硬科技’企业铺平创新发展之路。”芯联集成(68...
两位总裁?百济神州宣布全球研发... 百济神州高管迎来变动。12月18日晚间,百济神州有限公司(百济神州,ONC.US;6160.HK;6...
近3年七成主动权益基金正收益,... 文/每日财报 楚风临近年末,公募基金年度业绩排名即将出炉。今年来,A股市场走强,上证指数一度突破4...
锚定高质量发展 践行金融为民初... 12月18日,中银三星人寿凭借在业务发展、战略践行、社会责任等多维度的卓越表现,荣膺“2025金柿奖...
沐曦上市,葛卫东日赚近200亿... 据节点财经获悉,投资大佬葛卫东布局GPU企业沐曦股份,日赚近200亿元,而他投资的另一家企业五一视界...
中国这座城市楼市反攻!机构:明... 2025 年本港楼市成功 “反攻”,住宅物业交投节节上升,楼价亦企稳回升,四年来首见 “量额价” 齐...
渤海银行聘任首席信息官,由一副... 12月18日,渤海银行发布公告称,董事会已于2025年12月18日审议通过聘任谢凯担任该行首席信息官...
【独家】字节跳动正推进与多家厂... 界面新闻记者 | 李家琦界面新闻编辑 | 文姝琪12月19日,界面新闻独家获悉,字节跳动正推进与vi...