各位,我在用golangredisset一些数据。使用的是gopkg.in/redis.v4用法:c.Set(uid+":policy",b,exp*time.Second)这里有个问题这个exp之前是字符串我转成int-->exp,_:=strconv.Atoi(policy.Exp)然后我用exp*time.Second报错:invalidoperation:time.Second乘以exp(mismatchedtypestime.Durationandint)我自己hardcode手写一个数字相乘700乘以time.Second是ok的。但是exp就不行,我看了700和exp的数据类型都是int求教是怎么回事,顺便说一下exp的值也是700谢谢
2 回答
当年话下
TA贡献1890条经验 获得超9个赞
这其实是一个隐含的常量和非常量类型转换问题,先看下时间定义typeDurationint64const(NanosecondDuration=1Microsecond=1000*NanosecondMillisecond=1000*MicrosecondSecond=1000*MillisecondMinute=60*SecondHour=60*Minute)再看这里常量和Duration相乘700*time.Duration非常量和Duration相乘exp:=700exp*time.Duration为了能够完成相乘,必须先把类型转成一致,所以就是能否转成类型Duration的问题:700(常量)->Duration,700在Duration取值范围内,因此可以转换exp(int类型)->Duration,go中不同类型必须强制转换,因此报错顺便说一句,文档推荐time.Duration(700)*time.Second这样使用
HUX布斯
TA贡献1876条经验 获得超6个赞
//Commondurations.ThereisnodefinitionforunitsofDayorlarger//toavoidconfusionacrossdaylightsavingstimezonetransitions.////TocountthenumberofunitsinaDuration,divide://second:=time.Second//fmt.Print(int64(second/time.Millisecond))//prints1000////ToconvertanintegernumberofunitstoaDuration,multiply://seconds:=10//fmt.Print(time.Duration(seconds)*time.Second)//prints10s//const(NanosecondDuration=1Microsecond=1000*NanosecondMillisecond=1000*MicrosecondSecond=1000*MillisecondMinute=60*SecondHour=60*Minute)看一下重点ToconvertanintegernumberofunitstoaDuration下边的部分.time.Second*1这个片段中,1并不是int,也不是int64,而是无类型常量,相当于constexp=1和time.Second*a.
添加回答
举报
0/150
提交
取消