golang 数字与时间相乘与redis的问题
各位,我在用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
看一下重点
To convert an integer number of units to a Duration
下边的部分.time.Second * 1
这个片段中,1并不是int,也不是int64,而是无类型常量,相当于const exp = 1
和time.Second * a
.这其实是一个隐含的常量和非常量类型转换问题,先看下时间定义
再看这里
为了能够完成相乘,必须先把类型转成一致,所以就是能否转成类型Duration的问题:
700(常量)->Duration,700在Duration取值范围内,因此可以转换
exp(int类型)->Duration,go中不同类型必须强制转换,因此报错
顺便说一句,文档推荐time.Duration(700)*time.Second这样使用