go-carbon 和 gorm 优雅处理数据库日期时间

一、简介

(一) carbon

carbon 是一个简单、语义化、开发人员友好的 golang 时间包。carbon 提供了丰富的日期和时间处理功能,使得日期和时间操作更加简单和直观。

(二) gorm

gorm 是一个用于 Go 语言的 ORM(对象关系映射)框架。它提供了简洁的 API 来操作数据库,支持多种数据库(如 MySQL、PostgreSQL、SQLite 等),并且具有良好的性能和扩展性。

二、基本使用

(一) Carbontime.Time 互转
// 将标准 time.Time 转换成 Carbon
carbon.CreateFromStdTime(time.Now())
// 将 Carbon 转换成标准 time.Time
carbon.Now().StdTime()
(二) 与 gorm 配合使用
1. time.Time

以往我们定义模型中时间日期字段类型为 time.Time

type User struct {ID        uintName      stringEmail     stringCreatedAt time.TimeUpdatedAt time.Time
}

但是在一些场景下比如我们要把查询出来的数据 CreatedAtUpdatedAt 转成int64(时间戳) 给前端,这时候需要额外写代码将其转化。

users, err = query.User.WithContext(context.Background()).FindAll()
if err != nil {return nil, err
}var resp []Resp
for _, user := range users {resp = append(resp, Resp{ID:        user.ID,Name:      user.Name,Email:     user.Email,CreatedAt: user.CreateTime.UnixMilli(),UpdatedAt: user.CreateTime.UnixMilli(),})
}
return resp, nil
2. carbon.TimestampMilli

我们只需要修改一下 CreatedAtUpdatedAt类型为 carbon.TimestampMilli 就可以了

type User struct {ID        uintName      stringEmail     stringCreatedAt carbon.TimestampMilliUpdatedAt carbon.TimestampMilli
}

同样的需求只要gorm 查询 ,carbon 就会自己将我们的 time.Time 转成int64(时间戳)

users, err = query.User.WithContext(context.Background()).FindAll()
if err != nil {return nil, err
}// [{Key:1 Value:{"id":1,"name":"admin","email":"test@test.com", "created_at":1678734089000,"updated_at":1730681347000}}]
3. 创建日期对象
query.User.WithContext(context.Background()).Create(&model.User{Name:       "carbon",Email:      "carbon",CreateTime: carbon.Now().ToTimestampMilliStruct(),UpdateTime: carbon.Now().ToTimestampMilliStruct(),
})

三、总结

carbongorm 是 Go 语言中非常有用的库,分别用于日期和时间操作以及数据库操作。通过结合这两个库,可以简化开发过程,提高代码的可读性和可维护性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/6812.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java 抽象类 详解

文章目录 一、概述1.1、什么是抽象类1.2、定义抽象类1.3、什么是抽象方法1.4、定义抽象方法 二、特点2.1、抽象类的特点2.1.1、抽象类不可以实例化对象2.1.2、抽象类必须要被继承2.1.3、抽象类的子类2.1.4、抽象类的成员 2.2、抽象方法的特点2.2.1、只能有方法声明,…

A20红色革命文物征集管理系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

SpringBoot Java教学工具:创新教育体验

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理教学辅助平台的相关信息成为必然。开发合适…

VisionPro —— CogIPOneImgeTool工具详解

CogIPOneImageTool工具主要用来对单张图像进行算法处理操作 CogIPOneImgeTool简介 CogIPOneImageTool 工具可完成高斯平滑、高通滤波和图像量化等基本图像处理操作。Image Processing One Image 工具编辑控件为此工具提供图形用户界面。 Image Processing Operations (图像处…

WPF+MVVM案例实战与特效(二十四)- 粒子字体效果实现

文章目录 1、案例效果2、案例实现1、文件创建2.代码实现3、界面与功能代码3、总结1、案例效果 提示:这里可以添加本文要记录的大概内容: 2、案例实现 1、文件创建 打开 Wpf_Examples 项目,在 Views 文件夹下创建窗体界面 ParticleWindow.xaml,在 Models 文件夹下创建粒子…

推荐一款功能强大的FTP和云应用程序:FTPie Pro

FTPie Pro是一款集多种云存储和 FTP 客户端功能于一体的先进文件管理工具。通过支持Google Drive、Dropbox和OneDrive等主流云存储服务,用户可以在一个平台上高效管理文件。同时,它兼容 FTP、FTPS 和 SFTP 等多种文件传输协议,确保文件传输的…

playwright学习记录1

playwright 简介:Playwright 是由微软推出的一款用于 Web 应用自动化测试的开源框架,它支持多浏览器、多平台,具有强大的 API 和现代化的自动化功能,适用于跨浏览器的 UI 测试。Playwright 支持所有现代渲染引擎,包括…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(下)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上) 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(下) 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上) 【…

数据结构进阶——AVL树

一、AVL树基本概念 1.1定义 如果一颗二叉搜索树的左右子树的高度差的绝对值不超过1(1,0,-1),那么这颗二叉搜索树就叫AVL树。 1.2AVL树的性质 AVL树的左右子树也是一颗AVL树,二叉搜索树是一颗高度平衡的二叉…

Easyconnect官网下载安装使用教程

软件下载 打开官网https://www.sangfor.com/downloads; 选择自己熟悉的语言 windows选择支持与服务—软件下载 mac 找售后智能在线(见下面MAC) 在所有产品与服务中选择:SSL VPN 左侧选择SSL VPN工具,然后根据自…

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron ),又名感知机( Perceptron ),在模型结构上与 逻辑回归 一致,这里以一个二维输入量的例子对其进行进一步 的解释: 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

人工智能(AI)和机器学习(ML)技术学习流程

目录 人工智能(AI)和机器学习(ML)技术 自然语言处理(NLP): Word2Vec: Seq2Seq(Sequence-to-Sequence): Transformer: 范式、架构和自注意力: 多头注意力: 预训练、微调、提示工程和模型压缩: 上下文学习、思维链、全量微调、量化、剪枝: 思维树、思维…

Odoo:免费开源的医药流通行业信息化解决方案

文 / 开源智造Odoo亚太金牌服务 方案概述 开源智造Odoo免费开源ERP提供面向医药批发采、供、销业财一体化,及直接面向消费者的门店终端、全渠道管理、营销管理以及GSP合规管理解决方案,提升企业运营效率和全业务链条的数字化管控、追溯能力。 行业的最新…

牛客sql题目总结(1)

1.第N高的薪水 AC: create function getnthhighestsalary(n int) returns int begindeclare m int; set m n - 1; return (select distinct salaryfrom employeeorder by salary desclimit m, 1); end 2.平均播放进度大于60%的视频类别 AC: select tb_video_info…

数量少的连锁店要不要用智能巡检?

无论是在新闻报道中,还是企业定制目标客户时,人们都更喜欢聚焦原本就已经站在各行业金字塔尖的那 1%,剩下的 99% 却常常被忽略。 比如此刻我正在搜索中小型连锁企业智能巡检相关的资讯,但网页展示的结果基本围绕着「中大型、1000门…

windows 进程降权和提权代码示例(2)

强制完整性控制 - Win32 应用程序 |Microsoft 学习 一、强制完整性控制 品03/26/20217 个参与者 反馈 本文内容 诚信标签进程创建强制性政策 强制完整性控制 (MIC) 提供了一种用于控制对安全对象的访问的机制。此机制是对自主访问控制的补充&#xff…

Redis - Set 集合

一、基本了解 集合类型也是保存多个字符串类型的元素的,但和列表类型不同的是,集合中1)元素之间是⽆序 的2)元素不允许重复,如图2-24所⽰。⼀个集合中最多可以存储 32 2 − 1 个元素。Redis除了⽀持 集合内的增删查改…

Java教学辅助:SpringBoot平台实战技巧

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

Codeforces Round 970(Div. 3) (预处理后缀, 一道适合py的题)

F. Sakurakos Box 传送门:Problem - 2008F - Codeforces Sakurako has a box with nn balls. Each ball has its value. She wants to bet with her friend that if the friend randomly picks two balls from the box (it could be two distinct balls, but they…

OpenDroneMap Webodm

OpenDroneMap & Webodm OpenDroneMap Webodm 开源无人机航拍系列图像及其它系列图像三维重建软件。很棒的开源无人机测绘软件OpenDroneMap,从航拍图像生成精确的地图、高程模型、3D 模型和点云。 应用领域 Mapping & Surveying 测绘和测量 从图像测量获得高精度的可…