go项目zero框架中表字段日期设置的几种格式对比与实践

在 GoZero 框架中,日期字段的格式通常取决于你的应用场景以及所使用的数据库类型。在 GoZero 中,日期字段的设置方式一般有两种:通过 `time.Time` 类型和通过字符串(例如 `string` 或 `int64`)。每种方式有其适用的场景和优缺点。

### 1. 使用 `time.Time` 类型(推荐方式)

在 GoZero 中,推荐使用 `time.Time` 类型来处理日期字段。这是因为 Go 的 `time` 包提供了强大的日期和时间操作功能,而 `time.Time` 也更容易与数据库(如 MySQL、PostgreSQL)中的 `DATETIME` 或 `TIMESTAMP` 类型进行映射。

#### 示例代码:使用 `time.Time` 类型

```go

type User struct {ID        int64     `json:"id"`Name      string    `json:"name"`CreatedAt time.Time `json:"created_at"` // 使用 time.Time 类型UpdatedAt time.Time `json:"updated_at"`
}


```

### 配置与数据库映射

- **数据库**:在数据库中,通常将 `time.Time` 类型映射到 `DATETIME` 或 `TIMESTAMP` 字段,格式为 `YYYY-MM-DD HH:MM:SS`。
- **GoZero 框架**:GoZero 内部通常会自动处理 `time.Time` 类型与数据库日期类型(如 `DATETIME`、`TIMESTAMP`)之间的转换。

#### 示例:数据库表设计

```sql

CREATE TABLE users (id BIGINT PRIMARY KEY,name VARCHAR(100),created_at DATETIME,updated_at DATETIME
);


```

#### 格式化时间(GoZero)

GoZero 在处理 `time.Time` 时会自动将其转换为适当的格式。如果你需要自定义时间格式,可以通过 `time.Format()` 方法进行格式化。

例如,如果你希望将日期输出为 `YYYY-MM-DD HH:MM:SS` 格式,可以这样做:

```go

createdAt := user.CreatedAt.Format("2006-01-02 15:04:05")


```

### 2. 使用 `string` 类型(不推荐)

在某些情况下,你也可以将日期存储为 `string` 类型,并在业务层手动处理日期的转换。这种方式较为简单,但不建议使用,因为它缺乏 `time.Time` 提供的日期计算和格式化功能。

#### 示例代码:使用 `string` 类型

```go

type User struct {ID        int64  `json:"id"`Name      string `json:"name"`CreatedAt string `json:"created_at"` // 使用 string 类型存储日期UpdatedAt string `json:"updated_at"`
}


```

#### 格式化字符串

你需要手动在应用中将字符串转换为日期对象(`time.Time`),并确保它符合数据库和应用的要求。

```go

createdAt := "2025-01-03 12:30:45"
parsedTime, err := time.Parse("2006-01-02 15:04:05", createdAt)
if err != nil {// 处理错误
}


```

### 3. 使用 `int64` 类型(Unix 时间戳)

另一种方式是将日期存储为 Unix 时间戳,即将日期转换为从 1970-01-01 00:00:00 UTC 到当前时间的秒数。Unix 时间戳是一个整数,通常是 `int64` 类型。

#### 示例代码:使用 `int64` 类型(Unix 时间戳)

```go

type User struct {ID        int64 `json:"id"`Name      string `json:"name"`CreatedAt int64  `json:"created_at"` // 使用 int64 类型存储 Unix 时间戳UpdatedAt int64  `json:"updated_at"`
}


```

在这种情况下,你通常会将 `int64` 类型的 Unix 时间戳转换为 `time.Time`,或者将其直接插入数据库。Unix 时间戳的优点是它可以非常方便地进行时间比较和计算,而且数据库存储时占用的空间较小。

#### 格式化时间(Unix 时间戳)

```go

createdAt := time.Unix(user.CreatedAt, 0).Format("2006-01-02 15:04:05")


```

#### 数据库存储

在数据库中,你可以将时间戳存储为整数类型,通常是 `BIGINT` 类型:

```sql

CREATE TABLE users (id BIGINT PRIMARY KEY,name VARCHAR(100),created_at BIGINT,  -- 存储 Unix 时间戳updated_at BIGINT
);


```

### 总结

- **推荐使用 `time.Time` 类型**:这不仅符合 Go 的最佳实践,还能更好地与数据库中的日期类型(如 `DATETIME` 或 `TIMESTAMP`)兼容。
- **如果必须使用字符串或 Unix 时间戳**:可以考虑将日期转换为字符串或 Unix 时间戳,但要注意,这可能需要手动管理格式化和转换操作。

大部分情况下,GoZero 会自动处理 `time.Time` 类型和数据库之间的映射,所以选择 `time.Time` 类型会更加简洁和安全。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5动画蓝图

动画蓝图,混合空间,状态机,瞄准偏移,动画蒙太奇,动画混合,骨骼绑定,动画重定向,动画通知,Control Rig…… 虚幻动画模块是一个庞大的系统,大模块里又包含很多…

XIAO Esp32S3制作网络摄像头——1音频获取

1、功能介绍 本文主要是基于XIAO Esp32S3(Sense)做的一款网络摄像头,主要包含以下功能 1 音频获取/保存 2 视频获取/视频保存 3 行人检测/火焰检测/行人追踪(告警) 4 指定区域 5 摄像头旋转 。。。 本文主要实现第一步,音频获取,后续会陆续实现后面的功能,敬请期…

Windows安装了pnpm后无法在Vscode中使用

Windows安装了pnpm后无法在Vscode中使用 解决方法: 以管理员身份打开 PowerShell 并执行以下命令后输入Y回车即可。 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser之后就可以正常使用了

Leffa 虚拟试衣论文笔记

Leffa: Learning Flow Fields in Attention for Controllable Person Image Generation https://github.com/xuanandsix/awesome-virtual-try-on-note/tree/main/Leffa 打开链接查看详情,更多虚拟试穿论文持续更新。

qt5.15.2+visual studio2022 免安装版环境配置

1.环境准备 visual studio2022qt5.15.2(免安装版本) 2.环境配置 2.1 打开首选项 2.2 添加Qt版本 2.3 构建套件手动添加Qt 5.15.2(msvc2019_64)并配置如下 3.新建项目 问题1:qt creator 没有欢迎界面 解决办法&#…

手写顺序流程图组件

效果图 完整代码 <template><div><div class"container" :style"{ width: ${spacingX * (colNum - 1) itemWidth * colNum}px }"><divv-for"(item, i) in recordList":key"i"class"list-box":style&…

Spring Boot自定义中文Banner

Spring Boot自定义中文Banner在线生成工具 https://www.bootschool.net/https://www.bootschool.net/1.选择喜欢的复制 2.在resources文件下新建banner文件&#xff0c;粘贴即可 <_> ::::: …

SpringCloud源码-Ribbon

一、Spring定制化RestTemplate&#xff0c;预留出RestTemplate定制化扩展点 org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration 二、Ribbon定义RestTemplate Ribbon扩展点功能 org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguratio…

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注

风力涡轮机缺陷检测数据集&#xff0c;86.6&#xff05;准确识别率&#xff0c;11921张图片&#xff0c;支持yolo&#xff0c;PASICAL VOC XML&#xff0c;COCO JSON格式的标注 数据集下载 yolov11&#xff1a; https://download.csdn.net/download/pbymw8iwm/90206849 yolov…

Vue 针对浏览器参数过长实现浏览器参数加密解密

1、首先安装crypto-js npm install crypto-js 1、在router/index.js中添加如下代码 在utils工具类添加如下 encryption.js源码 import CryptoJS from crypto-js import CryptoJSCore from crypto-js/core import AES from crypto-js/aes import ZeroPadding from crypto-js/…

Python脚本实现通过Vector VN1630A CAN盒子与ECU通信

1 安装 python-can 包 安装命令如下&#xff1a; pip install python-can安装完成后可用下面命令查看是否安装成功及版本。 pip show python-canName: python-can Version: 4.4.2 Summary: Controller Area Network interface module for Python Home-page: https://github.…

Oracle 创建本地用户,授予权限,创建表并插入数据

目录 一. 用户的种类二. 切换session为PDB三. 创建用户并授予权限四. 创建表空间五. 为用户分配默认表空间并指定表空间配额六. 通过创建的用户进行登录七. 创建脚本&#xff0c;简化登录八. 查看用户信息九. 创建表&#xff0c;并插入数据9.1 查看当前用户的schema9.2 插入数据…

普及组集训数据结构--并查集

P1551 亲戚 - 洛谷 | 计算机科学教育新生态 并查集就是把所有相关联的量串成一串珠子&#xff0c;抽象来说就是&#xff1a; 把此类相关联的量当作节点&#xff0c;两个节点之间连接一条无向边&#xff0c;所形成的图 例题算法流程&#xff1a; 在此定义“族长”就是一个树的…

ESP32-S3遇见OpenAI:OpenAI官方发布ESP32嵌入式实时RTC SDK

目录 OpenAI RTC SDK简介应用场景详解智能家居控制系统个人健康助手教育玩具 技术亮点解析低功耗设计快速响应高精度RTC安全性保障开发者指南 最近&#xff0c;OpenAI官方发布了一款针对ESP32-S3的嵌入式实时RTC&#xff08;实时时钟&#xff09;SDK&#xff0c;这标志着ESP32-…

JS基础 -- 数组 (对象 / 数组 / 类数组 / 对象数组)的遍历

一、数组&#xff1a; 数组是复杂数据类型&#xff0c;用于存储一组有序的数据。 1、创建数组&#xff1a; ① 使用 new 关键字&#xff1a; let arr new Array() // 创建一个长度为0的空数组 let arrLength new Array(5) // 创建一个长度为5的空数组② 字面量形式&#…

【期末复习】一、操作系统概论

题型 选择题 论述题 综合分析题(计算,证明) 算法分析题(根据程序代码分析) 1.方面 操作系统在计算机系统中主要涉及硬件、软件和数据这三个重要方面。 2.操作系统发展历史 手工操作阶段(1940s) 联机批处理系统阶段(1950s) 脱机批处理系统阶段(1950s) 多道…

基于STM32F103的USART的原理及应用(一)(实现手机BLE和MCU进行通信)

一&#xff0c;查阅数据手册&#xff0c;找到对应的IO口和外设总线并配置好外设源文件 想了解USART的具体原理的小伙伴请进传送门&#xff1a;&#xff08;总结&#xff09;STM32中USART原理及应用&#xff08;PC、BLE、ESP8266通信实现&#xff09;-CSDN博客 二&#xff0c;打…

业务模型与UI设计

业务数据模型的设计、UI设计这应该是程序设计中不可缺少的部分。做程序设计的前提应该先把这两块设计好&#xff0c;那么&#xff0c;来一个实际案例&#xff0c;看看这2块的内容。 汽车保养记录业务模型与UI设计&#xff1a; 一、【车辆清单】 记录车辆相关的数据&#xff0…

微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城

1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上&#xff0c;限流是控制进入微服务的请求数量&#xff0c;防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时&#xff0c;…

unity学习4:git和SVN的使用差别

目录 1 svn 1.1 操作逻辑 1.2 对应工具 1.3 SVN避免冲突的好习惯 2 git 2.1 git的基础操作逻辑 2.1.1 commit时&#xff0c;提交文件之外的其他文件需要pull 2.1.2 commit时&#xff0c;发现要提交的本地文件和服务器的文件冲突了 2.1.3 pull 时 2.2 对应工具 2.3 …