基于Gin封装的Web框架如何更改日期格式以及如何进行加密(MD5)

在登陆系统中我们我们时常要去校验密码是否正确,而数据库中的密码是密文形式在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.NullTime

func (t *WrapTime) UnmarshalJSON(data []byte) (err error) {
    if string(data) == "null" {
        t.Valid = false
        return nil
    }

    var now time.Time
    if len(string(data)) == len(YYYY_MM_DD)+2 {
        now, err = time.ParseInLocation(`"`+YYYY_MM_DD+`"`, string(data), time.Local)
        t.Valid = true
        t.Time = now
    } else {
        now, err = time.ParseInLocation(`"`+YYYY_MM_DD_HH_MM_SS+`"`, string(data), time.Local)
        t.Valid = true
        t.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 定义的一致

希望对大家有帮助

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值