各位,我在用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 谢谢
这其实是一个隐含的常量和非常量类型转换问题,先看下时间定义
再看这里
为了能够完成相乘,必须先把类型转成一致,所以就是能否转成类型Duration的问题:
700(常量)->Duration,700在Duration取值范围内,因此可以转换
exp(int类型)->Duration,go中不同类型必须强制转换,因此报错
顺便说一句,文档推荐time.Duration(700)*time.Second这样使用