为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 时间模块上苦苦挣扎

在 Go 时间模块上苦苦挣扎

Go
饮歌长啸 2022-04-26 14:29:56
我正在使用 go-redis 并尝试对我正在做的 Set 设置过期时间。文档中的示例显示 -func ExampleClient_Set() {    // Last argument is expiration. Zero means the key has no    // expiration time.    err := rdb.Set("key", "value", 0).Err()    if err != nil {        panic(err)    }    // key2 will expire in an hour.    err = rdb.Set("key2", "value", time.Hour).Err()    if err != nil {        panic(err)    }}从我可以从time文档中收集到的内容(https://golang.org/pkg/time/),time.Hour应该返回“Hour 返回 t 指定的一天内的小时,范围为 [0, 23]。 ”,这将使到期值根据代码运行的时间而有所不同......我确信这不是他们想要的,而且我确信编写模块的人更了解 Go比我,我无法想象这就是它的实际作用。被难住了,我阅读了 Set 的 go-redis 代码(https://github.com/go-redis/redis/blob/0658532833205c238a41687728cb13c294504162/commands.go#L839),它看起来需要几秒钟,除非你有什么设置,然后它需要毫秒,所以我通过了它120,它在第一次运行时花了一个废话说“你要求 120ns,但最小值是 1ms”......我添加了一堆零,它几乎很快就过期了正如我所做的那样Set,所以我最终放弃了,只是决定寻求一些帮助以正确地完成它,而不是在我想要的每个值上添加一堆零并希望它正常工作。我现在有时间。分钟-基于示例,我假设这给了我一分钟,但我实际上想要两个,并且在阅读了所有这些并尝试了所有这些事情之后,我不知道如何实现这一目标。非常感谢您的帮助!
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

从我可以从时间文档中收集到的内容(https://golang.org/pkg/time/),time.Hour应该返回“Hour 返回 t 指定的一天内的小时,范围 [0, 23] 。”

您正在查看的文档time.Time.Hour,您可以像这样使用它:

now := time.Now()
fmt.Println(now.Hour())

您正在寻找的文档是常量time.Hour,它被time.Duration定义为60 * Minute– 它恰好向您展示了如何获得您正在寻找的两分钟。

2 * time.Minute


查看完整回答
反对 回复 2022-04-26
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您将time.HourTime.Hour()混淆了。

time.Hour是一个常数,表示一小时的持续时间。这就是您示例中的代码所使用的。

Time.Hour()is 是一个time.Time值的方法,它返回指定日期内的小时,正如您从文档中引用的那样。


查看完整回答
反对 回复 2022-04-26
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

SetAPI 需要的是类型time.Duration。如果需要两分钟,请使用:

err := rdb.Set("key", "value", 2*time.Minute).Err()

您正在查看 的文档Time.Hour(),而不是time.Hour.


查看完整回答
反对 回复 2022-04-26
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信