Json Go:指定给嵌套结构
下面是一段代码片段——我不知道如何在用于JSON解码的嵌套结构(“myTime”)中分配变量。(我在JSON文件中有一些Unix时间戳,希望学习如何解码它们。) 这会引发以下错误:Json Go:指定给嵌套结构,json,go,Json,Go,下面是一段代码片段——我不知道如何在用于JSON解码的嵌套结构(“myTime”)中分配变量。(我在JSON文件中有一些Unix时间戳,希望学习如何解码它们。) 这会引发以下错误: main.go:15: cannot use time.Unix(a, 0) (type time.Time) as type *myTime in assignment main.go:25: t.String undefined (type myTime has no field or method String
main.go:15: cannot use time.Unix(a, 0) (type time.Time) as type *myTime in assignment
main.go:25: t.String undefined (type myTime has no field or method String)
我不知道该如何理解这个问题,所以任何解释或指向特定文档的指针都会大有帮助
package main
import (
"encoding/binary"
"encoding/json"
"fmt"
"log"
"time"
)
type myTime time.Time
func (t *myTime) UnmarshalJSON(buf []byte) error {
a, _ := binary.Varint(buf)
t = time.Unix(a, 0)
return nil
}
func main() {
var t myTime
if err := json.Unmarshal([]byte("123123123.123123"), &t); err != nil {
log.Fatal(err)
}
fmt.Printf("result: %f\n", t.String())
}
Unix返回一个time.time值(不是指针) 所以只要做
*t=myTime(time.Unix(a,0))
这基本上是将time.Unix(a,0)返回的值赋给t
至于字符串,您必须自己制作:
func(m myTime)String()String{return time.time(m).String()}
这是因为当您为类型别名时,您不会继承其方法集。
所以你必须自己声明任何你想要的方法。它不是嵌套的,我尝试了这个方法,但我得到了另一个错误:“main.go:15:不能使用time.Unix(a,0)(键入time.time)作为赋值中的myTime类型”。问题是我试图将time.time对象分配给别名类型?如果类型不相同,并且不能从一种类型分配到另一种类型,那么为什么要使用别名类型呢?