golang 数字与时间相乘与redis的问题

发布于 2022-09-11 15:42:35 字数 411 浏览 15 评论 0

各位,我在用golang redis set一些数据。使用的是gopkg.in/redis.v4
用法:c.Set(uid + ":policy", b, exp * time.Second)
这里有个问题 这个exp 之前是字符串 我转成 int -->exp, _ := strconv.Atoi(policy.Exp)
然后 我用 exp * time.Second 报错:invalid operation: time.Second 乘以 exp (mismatched types time.Duration and int)

我自己 hard code 手写一个 数字相乘 700 乘以 time.Second 是 ok的。但是 exp就不行,我看了 700 和 exp的数据类型 都是 int 求教是怎么回事,顺便说一下 exp的值也是700 谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

笨笨の傻瓜 2022-09-18 15:42:35

// Common durations. There is no definition for units of Day or larger
// to avoid confusion across daylight savings time zone transitions.
//
// To count the number of units in a Duration, divide:
//    second := time.Second
//    fmt.Print(int64(second/time.Millisecond)) // prints 1000
//
// To convert an integer number of units to a Duration, multiply:
//    seconds := 10
//    fmt.Print(time.Duration(seconds)*time.Second) // prints 10s
//
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

看一下重点To convert an integer number of units to a Duration下边的部分.

time.Second * 1这个片段中,1并不是int,也不是int64,而是无类型常量,相当于const exp = 1time.Second * a.

醉城メ夜风 2022-09-18 15:42:35

这其实是一个隐含的常量和非常量类型转换问题,先看下时间定义

type Duration int64
const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

再看这里

常量和Duration相乘
700*time.Duration

非常量和Duration相乘
exp := 700
exp*time.Duration

为了能够完成相乘,必须先把类型转成一致,所以就是能否转成类型Duration的问题:
700(常量)->Duration,700在Duration取值范围内,因此可以转换
exp(int类型)->Duration,go中不同类型必须强制转换,因此报错

顺便说一句,文档推荐time.Duration(700)*time.Second这样使用

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文