Go语言中如何正确比较Time类型时间 判断created_at字段是否过期
错误原因
- 用法错误:GORM 的
First方法返回的是*gorm.DB类型的查询操作对象,你需要的CreatedAt字段存储在传入的post结构体实例中,直接访问result.CreatedAt无法拿到正确的时间字段,属于调用对象错误。 - 语法限制:Go 语言的
time.Time类型没有重载比较运算符,不能直接使用>、<、==做时间大小比较,必须调用该类型提供的内置比较方法。
正确实现
你需要的判断CreatedAt早于当前时间(即已过期)的逻辑,使用Before方法实现即可,完整代码如下:
// 先处理查询错误,避免拿到空结构体的零值时间导致逻辑错误 result := database.DB.Where("code = ?", post.code).First(&post) if result.Error != nil { // 自行处理查询错误,比如记录不存在、数据库连接异常等 log.Println("数据查询失败:", result.Error) return } // 已过期判断逻辑 if post.CreatedAt.Before(time.Now()) { // 执行过期后的对应操作 }
其他常用时间比较场景
- 判断时间是否晚于指定时间(比如判断未过期),使用
After方法:if post.CreatedAt.After(time.Now()) { // 未过期逻辑 } - 判断两个时间是否完全相等,使用
Equal方法:if post.CreatedAt.Equal(time.Now()) { // 时间相等的对应逻辑 }
内容的提问来源于stack exchange,提问作者saa
相关产品推荐
相关产品推荐

