基于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 定义的一致

希望对大家有帮助

相关内容

热门资讯

前端学习第三阶段-第4章 jQ... 4-1 jQuery介绍及常用API导读 01-jQuery入门导读 02-JavaScri...
EL表达式JSTL标签库 EL表达式     EL:Expression Language 表达式语言     ...
数字温湿度传感器DHT11模块... 模块实例https://blog.csdn.net/qq_38393591/article/deta...
【内网安全】 隧道搭建穿透上线... 文章目录内网穿透-Ngrok-入门-上线1、服务端配置:2、客户端连接服务端ÿ...
【Spring Cloud A... 文章目录前言Metadata元数据ClassMetadataSpring中常见的一些元注解Nacos...
React篇-关于React的... 一.简介1.介绍用于构建用户界面的 JavaScript 库2.创建项目(1)手动创建Documen...
win7 Pro 英文版添加中... win7pro x64英文版添加中文语言包1、下载语言包,并解压成lp.cab,复制到...
Android开发-Andro... 01  Android UI 1.1  UI 用户界面(User Interface,...
基于springboot教师人... 基于springboot教师人事档案管理系统【源码+论文】 开发语言:Jav...
编写软件界面的方式 本文重点解决如下问题:编写软件的界面有哪几种方式?通常情形下࿰...
keil调试专题篇 调试的前提是需要连接调试器比如STLINK。 然后点击菜单或者快捷图标均可进入调试模式。 如果前面...
GO语言小锤硬磕十三、数组与切... 数组用来保存一组相同类型的数据,go语言数组也分一维数组和多维数组。 直接上代码看一下...
三级数据库备考--数据库应用系... 1.数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤,每个步骤的设计活动按照...
prometheus数据持久化... https://segmentfault.com/a/1190000015710814 promet...
孩子用什么样的灯对眼睛没有伤害... 现代社会高速发展,越来越多的人开始重视身体健康,尤其是很多家长ÿ...
微软Bing GPT支持AI绘... 我想要一张图片:大象、珊瑚、火山、云朵我想要一张图片:亚特兰蒂斯...
最新!5月IPO受理数创今年新... IPO市场新动态。5月30日,共有4家IPO企业获得受理,其中创业板打破今年“0受理”现象,迎来首批...
Stable diffusio... Stable Diffusion是对Latent Diffusion模型的改进,主要在以下方面进行了...
Linux命令_lsof 网... 官方描述         一个打开的文件可以是一个常规文件、一个目录、一个块特殊文件、一个字符特殊...
树状数组(区间维护/单点修改) 1,定义 数组数组用于维护区间信息,简洁的几行的代码可以单点操作/区间查...