go项目实战 — gorm格式化时间字段_gorm time-csdn博客


本站和网页 https://blog.csdn.net/LW1314QS/article/details/125605988 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

GO项目实战 — Gorm格式化时间字段_gorm time-CSDN博客
GO项目实战 — Gorm格式化时间字段
最新推荐文章于 2024-01-18 01:01:31 发布
码一行 阅读量4.2k 收藏 15 点赞数 1 分类专栏: GO 文章标签: golang 开发语言 后端
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/LW1314QS/article/details/125605988
版权
专栏收录该内容
20 篇文章
2 订阅
订阅专栏
goshop开源项目的更新
备注:前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。感兴趣的可以点个star哦~
https://gitee.com/jobhandsome/goshop/
在使用
gorm
查询时,如果未对时间字段进行处理,结构体内的字段类型咱们使用的是
time.Time
:
type
Model
struct
ID
int64
`json:"id" gorm:"primary_key"`
CreatedAt
time
Time
`json:"created_at"`
UpdatedAt
`json:"updated_at"`
DeletedAt
`json:"deleted_at" sql:"index"`
这里咱们使用
类型在
进行查询的返回结果,读取到的时间字段往往是这样:“
2022-07-03T22:14:02.973528+08:00
”,带着时区和毫秒。但其实往往这样的格式,不是咱们想要的。
那么问题就来了:
如果想要 “
2022-07-03 22:14:02
” 这样的格式,需要怎么处理呢?
当插入一条数据到对应的表中时,
UpdateAt
字段是不赋值的,插入到数据库则会
0001-01-01 00:00:00.000000+00:00
,系统赋了⼀个默认值,当不想插⼊
默认值
时如何处理?
通过上面的分析,咱们能确定两个需求:
读取到的时间需要是:“2022-07-03 22:14:02” 这样的格式
当时间字段不赋值时,不插入默认值
解决方法:
定义一个时间类型
LocalTime time
虽然该数据类型实际类型为
,但是不具备
的内置⽅法,需要重写
MarshalJSON
⽅法来实现数据解析
func
LocalTime
byte
error
tTime
:=
return
fmt
Sprintf
"\"%v\""
Format
"2006-01-02 15:04:05"
nil
注意:
的格式化时间的规定时间字符串必须为
2006-01-02 15:04:05
这是
的诞⽣时间,不能更改为其他时间(这个时间字符串与
java
的"
yyyy-MM-dd HH:mm:ss
")同作⽤
替换成
localTime
到了这一步就解决了第一个需求读取数据时将将时间数据格式化。
下面来实现第二个需求:
t LocalTime
Value
driver
var
zeroTime time
tlt
//判断给定时间是否和默认零时间的时间戳相同
if
UnixNano
==
zeroTime
⽅法即在存储时调⽤,将该⽅法的返回值进⾏存储,该⽅法可以实现数据存储前对数据进⾏相关操作。
Scan
interface
value
ok
=
Errorf
"can not convert %v to timestamp"
⽅法可以实现在数据查询出来之前对数据进⾏相关操作。
到了这一步,咱们就实现了上面需求的功能。 更多功能请持续关注!!!!!
星球地址:https://t.zsxq.com/03MJM7YfI
关注公众号「程序员小乔」
优惠劵
关注
点赞
觉得还不错?
一键收藏
打赏
知道了
评论
查询时,如果未对时间字段进行处理,结构体内的字段类型咱们使用的是
:这里咱们使用
进行查询的返回结果,读取到的时间字段往往是这样:“”,带着时区和毫秒。但其实往往这样的格式,不是咱们想要的。如果想要 “” 这样的格式,需要怎么处理呢?当插入一条数据到对应的表中时, 字段是不赋值的,插入到数据库则会 ,系统赋了⼀个默认值,当不想插⼊时如何处理?读取到的时间需要是:“2022-07-03 22:14:02” 这样的格式当时间字段不赋值时,不插入默认值虽然该数据类型实际类型为 ,但是不
复制链接
扫一扫
专栏目录
Go
语言
中使用
小结
01-01
首先说明的是,在项目中使用orm的好处很多:
防止直接拼接sql语句引入sql注入漏洞
方便对modle进行统一管理
专注业务,加速
开发
坏处也是显而易见的:
者与最终的sql语句隔了一层orm,因此可能会不慎引入烂sql
依赖于orm的成熟度,无法进行一些「复杂」的查询。当然,复杂的查询一大半都是应该从设计上规避的
留意不合法的
时间
MySQL的DATE/DATA
TIME
类型可以对应
Golang
。但是,如果DATE/DATA
不慎插入了一个无效值,例如2016-00-00 00:00:00, 那么这条记录是无法查询出来的。会返回
.R
格式化
字段
Cry4TheMoon的博客
07-25
4676
**问题一**:读取到的
往往这样:``"2021-06-15T10:14:02.973528+08:00"``,带着时区和毫秒,**当不需要时区和毫秒时,如何
?**
**问题二**:insert一条数据到
_test表时,``update_
``
是不赋值的,那么,插入数据库后就会这样:``0001-01-01 00:00:00.000000 +00:00``,系统赋了一个默认值,**当不想插入默认值时如何处理?**
4 条评论
您还未登录,请先
登录
后发表或查看评论
Gorm
模型类 重写
有什么问题回复不及时,可以私聊我。也可以加我的星球:知识爬行者
10-13
629
问题:
GORM
中 如果我们使用到了CreateAt 和UpdateAt 就会发现 这个
的类型是
而其数据是
"2022-10-13T10:14:02.973528+08:00" 这样的,
然而这样的数据你说能用确实能用 ,但是一旦写入数据库中就变成了
0001-01-01 00:00:00.000000 +00:00
重写数据类型
话不多说 直接上代码
并且此代...
问题详解
09-19
主要给大家介绍了关于
问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用
具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
基于Go + Gin +
+ Vue
的小清单.zip
05-16
的小清单
小龙在线
12-09
1831
自带的
类型JSON默认输出RFC3339Nano格式的,但是如果想改为yyyy-MM-dd HH:mm:ss形式的
格式,需要定制MarshalJSON了。Go声明了一个Local
的别名,然后绑定了函数MarshalJSON,用于在序列化时调用。
使用钩子函数解决反序列化问题
qq_26372385的博客
07-06
3610
问题描述:
中使用下面的CreatedAt 和UpdateAt,可以实现在记录创建和更新时自动更新下面两个
。虽然使用默认的json解析,从json中到
中,从
中写入到数据库(mysql)都是标准的格式“2006-01-02 15:04:05”,但是从
中解析到json中时是
“RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"”。
原因:
type User struct {
Id
自定义
、字符串数组类型
LeoForBest的博客
10-06
610
是GO
中一款强大友好的ORM框架,但在使用过程中内置的数据类型不能满足以下两个需求,如下:
1.
类型返回的是 2023-10-03T09:12:08.53528+08:00这种字符串格式,需要额外处理,我们更希望默认的是是2023-10-03 09:12:08这种可读性更高的格式
2.有些数据
需要存储数组形式,如下Article 中Tags
希望保存不确定个字符串。直接保存会提示[error] unsupported data
预加载及输出处理(三)- 自定义
格式
glenshappy的专栏
10-21
2519
前言
类型的
在 JSON 序列化后呈现的格式为 "2020-03-11T18:26:13+08:00",在Go 标准库文档 -
的 MarshaJSON 方法下面有这样一段描述:
MarshalJSON 实现了json.Marshaler 接口。返回值是用双引号括起来的采用 RFC 3339 格式进行
表示,如果需要会提供小于秒的精度。
这个 RFC 3339 格式并不符合日常使用习惯,本文将介绍如何将其转换成常用的 "yyyy-MM-..
自定义 json,
Heyll__的博客
08-29
4410
package utils
import (
"bytes"
"errors"
"database/sql/driver"
//自定义json类型
type JSON []byte
func (j JSON) Value() (driver.Value, error) {
if j.IsNull() {
return nil, nil
return string(...
gxApp
项目-
gin/
redis mysql
11-02
该项目由
,整合了gin/
框架 redis缓存,mysql数据存储,以及consul数据远程配置服务
应用
时区问题与unique唯一索引
数据冲突问题
最新发布
淘小欣的博客
01-18
531
int64一般情况下,我们在定义表模型的时候,会使用
,但是会根据当前
存储。返回给前端的时候做时区转换会比较复杂,所以一般用int64// User 直接对应数据库中的表// 有些人叫做entity,有些人叫做model// 全部用户唯一// 创建
,毫秒数,使用int64解决时区问题// 更新
go
条件判断
weixin_45166511的博客
08-28
4545
查询
比较问题
中created_at
,go
,mysql数据库
的一些问题总结
从头再来的博客
12-14
5596
问题1
在生成的时候发现数据库的
慢了8个小时,后来发现是需要在连接数据库的时候加上参数&loc=local
func init(){
driverName := viper.GetString("datasource.driverName")
host := viper.GetString("datasource.host")
port := viper.Ge
没有值
qq_32319999的博客
1013
在mysql连接后面添加
&parse
=true
的两个问题
david___的博客
3144
第一个问题,MySQL在保存date
类型时,我已经用parse转换成本地
了依然不能保存成本地
,在数据库存的还是utc
,是因为没有在创建连接时加上
loc=Local
第二个问题,就是date
在作为查询条件时,比较的时候报错
sql: Scan error on column index 5, name “created_at”: unsupported...
中json
方法
qq_41188944的博客
08-10
1933
package model
"fmt"
"
Normal struct { // 内嵌方式(推荐)
func (t
Normal) MarshalJSON() ([]byte, error) {
// tune := fmt.Sprintf(`"%s"`, t.Format("2006-01-02 15:04:05"))
tune := t.Format(`"20.
热门推荐
ourLang
03-24
3万+
说明
在做项目时发现
格式是带有时区输入输出的,对平常使用的2020-01-03 12:22:33格式有一定的出入,不方便前端和
的对接,所以自己整理一下处理这个问题方法,方便大家参考
代码如下
//BaseModel 基础结构体 信息信息
type BaseModel struct {
Create
My
:"comment:'创建
';type:ti...
使用
时存到数据库中
和本地
不一致
stardust1996的博客
03-05
2170
的时候,发现数据库存的
比本地
早8个小时。查了一下是连接时没有设置时区,设置方法参照:
https://blog.csdn.net/weixin_30747253/article/details/99895577
...
DeletedAt DeletedAt
:"index"
类型存入
05-30
中,我们可以通过定义一个 `DeletedAt`
来实现软删除。这个
的类型通常是 `
`,表示被删除的
。在使用
进行数据库操作时,当我们调用 `Delete` 方法删除数据时,
会自动将 `DeletedAt`
设置为当前
,从而实现软删除的效果。
示例代码:
```go
import "
uint
:"primaryKey"`
Name
string
Age
int
:"index"`
```
在上面的代码中,我们定义了一个 `User` 结构体,其中包含一个 `DeletedAt`
,类型为 `
`,并添加了 `
:"index"` 标签来为该
创建索引。
当我们需要软删除某个 `User` 对象时,只需要调用 `Delete` 方法即可:
var user User
db.First(&user, 1)
db.Delete(&user)
上面的代码中,我们首先查询 ID 为 1 的 `User` 对象,并将其赋值给 `user` 变量,然后调用 `Delete` 方法删除该对象。此时,
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄6年
企业员工
45
原创
14万+
周排名
13万+
总排名
访问
等级
516
积分
30
粉丝
获赞
21
106
私信
热门文章
4282
php几种常用的加密解密算法
3378
Mac + Docker + K8S 本地搭建K8S集群
2838
PHP数组分组操作
2661
go-zero 成长之路—微服务电商实战系列(六、条件查询)
1935
分类专栏
并发编程
付费
3篇
容器管理系统
2篇
20篇
go-zero 电商实战系列
8篇
PHP
7篇
干货分享
9篇
最新评论
闰土小蒋:
第二种自定义的,参数用于浏览器调用,特殊字符影响解析,特殊字符直接获取不全加密的内容
go-zero 成长之路—微服务电商实战系列(六、条件查询)
码一行:
我没有部署,你也注入不进去,这是教学,主体是gozero的应用,你要是想sql安全,可以做想关的专业知识学习
go-zero 成长之路—微服务电商实战系列(二、划分篇)
只是自己定义的,跟框架没关系
权...:
zero的项目,为什么是microshop项目名?
Eureka666:
请问这个是在docker搭建的单节点集群吗?不太懂为啥没有用到kubeadm,在get nodes的时候我看到docker是担任了一个类似中控台的role
最新文章
「容器管理系统」 3. 初始化配置和日志监控
「容器管理系统」 1. 开篇:框架选型和环境搭建
Go Mutex 错过后悔的重要知识点
2023年
6篇
2022年
33篇
2021年
1篇
2020年
4篇
2018年
目录
评论 
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
打赏作者
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:
获取中
扫码支付
您的余额不足,请更换扫码支付或
充值
实付
使用余额支付
点击重新获取
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值