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

各位,我在用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谢谢
慕婉清6462132
浏览 935回答 2
2回答

当年话下

这其实是一个隐含的常量和非常量类型转换问题,先看下时间定义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布斯

//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.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript