关于redigo中使用以下方法,可以自定义返回redis数据库中你想获取的值。
Do(commandName string, args …interface{}) (reply interface{}, err error)
那么问题就来了。我使用该方法获取redis中存储的time.Now()类型数据,然后和系统当前时间进行求差。由于返回reply interface{},所以我想着定义一个time.Time类型的变量,然后进行序列化反序列化处理。
但是求差返回了一个:2562047h47m16.854775807s 很明显这是不对的。
然后我又尝试直接 t :=oldTime.(time.Time),然后控制台报了一个:
interface conversion:interface{} is []uint8,not timt.Time
我看博客上有人说可以使用库中的Replay Helpers进行类型转换,把replay从interface{}转换成我们想要的类型,如下:
但是没我想要的日期类型。后来我就把时间转为秒存储了。
由于之前采坑知道了这个数据是[]uint8的,所以我就先给它转了一下:
var t = oldTime.([]uint8)
然后又转换为string:
ba := []byte{}
for _, b := range t {
ba = append(ba, byte(b))
}
log.Infof("ba: %v", string(ba))
用秒计算,我获取系统当前时间也转成了秒,要想求差值必须类型一致。可以看到time.Now().Unix()是int64类型,所以需要把string给转成int64:
oldTimes, err := strconv.ParseInt(string(ba), 10, 64)
if err != nil {
log.Error("Error converting int64: %v", err)
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115806.html