You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:15:02