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,一经查实,立即删除!

相关文章

Linux(Ubuntu24.04)安装Eigen3库

本次安装Eigen3是在WSL2的Ubuntu24.04环境下进行。 Eigen3是一个C模板库,用于线性代数、矩阵运算和数值计算。它提供了一组高性能的矩阵和向量操作,以及常用的线性代数算法,如矩阵分解、特征值求解和最小二乘解等。 1、安装Eigen3 有两种安…

UE5动画蓝图

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

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

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

每日一学——日志管理工具(Graylog)

5.2 Graylog 5.2.1 输入输出配置 嘿,小伙伴们!今天我们要介绍的是Graylog——一款功能强大的日志管理工具。Graylog不仅可以帮助我们收集、存储和搜索日志数据,还可以通过丰富的插件系统进行扩展。让我们一起来看看如何配置Graylog来收集日…

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

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

【网络】什么是路由协议(Routing Protocols)?常见的路由协议包括RIP、OSPF、EIGRP和BGP

路由协议(Routing Protocols) 像 google map RIP (Routing Information Protocol):跳数 超了就废了 OSPF(Open Shortest Path First) 就好像拿着map找最短距离(跳数) EIGRP(Enhanced Interior Gateway Routing Protoco…

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 没有欢迎界面 解决办法&#…

一文带你快速上手 UniApp 组件与 uni-ui

深入了解 UniApp 组件与组件框架 uni-ui 在 UniApp 的开发中,组件化编程是提升开发效率和应用可维护性的重要手段。通过组件化,开发者可以将应用的不同功能模块进行封装,使得代码更加简洁、可重用,并且可以提升开发体验和效率。 …

手写顺序流程图组件

效果图 完整代码 <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&…

多个线程处理不同的数据,等线程都完成后再进行下一步操作

现在有三个任务,三个任务之间没有关联关系,但是第四个任务要等前三个完成之后才能进行,于是使用多线程完成前三个任务节省时间 示例代码: public void saveDataByOnlineTimeNew(LocalDateTime startTime, LocalDateTime endTime) {Objects.requireNonNull(startTime, "开…

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/…

antdesignvue vue3全局loading

这里封装为loading.js文件&#xff0c;代码赋值即可用 import { createApp, h } from vue import { Spin } from ant-design-vuelet instance null// 定义全屏遮罩样式 const style {position: fixed,left: 0,top: 0,width: 100%,height: 100%,display: flex,justifyContent…

WPF的一些控件的触发事件记录

<c1:C1ComboBox Width"230" ItemsSource"{Binding ReplaceWayList}" Style"{StaticResource ListSearch-C1ComboBox}" SelectedValueChanged"C1ComboBox_SelectedValueChanged"&#xff0c; 下拉框事件&#xff0c;SelectedValu…

设计模式-创建型设计模式总结

创建型设计模式&#xff08;Creational Design Patterns&#xff09;是 设计模式 中的一类&#xff0c;专注于如何实例化对象或类。它们提供了一些优雅的方式来创建对象&#xff0c;允许程序在对象创建过程中更灵活地进行管理&#xff0c;从而提高系统的扩展性和维护性。 创建…

Transformer算法实现IMDB文本分类任务和WMT14机器翻译任务

Transformer算法详解与PyTorch实现 目录 Transformer算法详解与PyTorch实现1. Transformer算法简介1.1 Transformer的优势1.2 Transformer的应用场景2. Transformer的核心组件2.1 自注意力机制(Self-Attention)2.2 多头注意力机制(Multi-Head Attention)2.3 位置编码(Posi…

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.…