苦苦挣扎的时间模块

时间:2019-12-18 20:55:10

标签: go

我正在使用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/)收集的信息,时间。小时应返回“小时返回t所指定的日期内的小时,范围为[0,23] ”,这将使到期值有所不同,具体取决于代码在一天中的什么时间运行。我确定这不是他们想要的,而且我确定编写模块的人都知道Go比我好,我无法想象这就是它的实际作用。

很沮丧,我读了Set(https://github.com/go-redis/redis/blob/0658532833205c238a41687728cb13c294504162/commands.go#L839)的go-redis代码,看起来它需要几秒钟,除非您进行了设置,否则它需要毫秒,所以我通过了{{1 }},然后在第一次运行时就说“您要求120ns,但最小值是1ms”……我加了一堆零,它几乎在我完成120之后就过期了,所以我最终放弃了,只是决定寻求一些帮助以使其正确执行,而不是在我想要的每个值上添加一堆零并希望它能正常工作。

我有时间。现在一分钟-根据示例,我想给我一点时间,但是我实际上想要两分钟,阅读完所有这些内容并尝试所有这些方法之后,我一无所知。帮助将不胜感激!

3 个答案:

答案 0 :(得分:4)

  

根据我从时间文档(https://golang.org/pkg/time/)收集的信息,时间。小时应该返回“小时返回t所指定的一天中的小时,范围为[0,23]。”

您正在查看the documentation for time.Time.Hour,您可以这样使用它:

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

您要查找的文档是the constant time.Hour,这是一个time.Duration,定义为60 * Minute –恰好向您展示如何获取所需的两分钟

2 * time.Minute

答案 1 :(得分:2)

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

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

Time.Hour()是一种基于time.Time值的方法,该值将返回指定日期(如您在文档中引用的那样)内的小时。

答案 2 :(得分:0)

printf("ULLONG_MAX : %llu\n", (unsigned long long int) ULLONG_MAX); printf("Big Integer : %llu\n", (unsigned long long int) 1234567890123456); API所需要的是Set类型。如果需要两分钟,请使用:

time.Duration

您正在查看的是err := rdb.Set("key", "value", 2*time.Minute).Err() 而不是Time.Hour()的文档。