Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 通过提供值来构造自定义类型的时间。时间返回非预期值_Go_Redis - Fatal编程技术网

Go 通过提供值来构造自定义类型的时间。时间返回非预期值

Go 通过提供值来构造自定义类型的时间。时间返回非预期值,go,redis,Go,Redis,我正在实现一个方法重新扫描(…),方法是遵循这个SO答案 我的方法: func(t*时间戳)重新扫描(x接口{})错误{ bs,ok:=x.([]字节) 如果!好的{ 返回fmt.Errorf(“预期[]字节,但得到%T”,x) } 布局:=“2006-01-02 15:04:05-0700 MST” parsedTime,err:=time.Parse(布局,字符串(bs)) 如果错误!=零{ 返回错误 } fmt.Println(parsedTime)//2019-12-10 00:00:

我正在实现一个方法重新扫描(…),方法是遵循这个SO答案

我的方法:

func(t*时间戳)重新扫描(x接口{})错误{
bs,ok:=x.([]字节)
如果!好的{
返回fmt.Errorf(“预期[]字节,但得到%T”,x)
}
布局:=“2006-01-02 15:04:05-0700 MST”
parsedTime,err:=time.Parse(布局,字符串(bs))
如果错误!=零{
返回错误
} 
fmt.Println(parsedTime)//2019-12-10 00:00:00+0000 UCT
Println(Timestamp(parsedTime))//有些胡言乱语。。。。
*t=时间戳(解析时间)
归零
}
这是我的自定义类型
类型Timestamp time.time


问题是,当我在Rediscan方法中打印出parsedTime时,它会输出2019-12-10 00:00:00+0000 UCT。但是打印出时间戳(parsedTime)输出{0 63714211200 0xc0001591a0}。有人能解释一下这里发生了什么吗?

这就是我希望看到的。Time实现fmt.Stringer(请参阅),各种fmt函数将调用它(如果接口已经实现)。时间戳类型没有实现这一点,因此原始结构被转储

时间。时间定义为:

type Time struct {
    wall uint64
    ext  int64
    loc *Location
}
这就是你看到的三个价值观


要解决这个问题,您可以使用类似
fmt.Println(time.time(parsedTime.Format)(“2006-01-02 15:04:05-0700 MST”)
,在时间戳或结构中实现String()。

这是因为
time.time
实现了
fmt.Stringer
方法,但您的自定义类型没有。最好在您的类型中嵌入
time.time
type Timestamp struct{time.time}
太好了,谢谢!您的嵌入式解决方案工作正常,很有意义!“修复”它的更好方法是在自定义类型中嵌入
time.time
type Timestamp struct{time.time}
。然后可以访问预定义函数。@Flimzy-这是我提供的第三个选项“或将time.time嵌入到您的结构中”(包括指向演示方法的游乐场的链接)。不确定否决票是否来自你,但如果是,请重新考虑。