Json Go:指定给嵌套结构

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

下面是一段代码片段——我不知道如何在用于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)
我不知道该如何理解这个问题,所以任何解释或指向特定文档的指针都会大有帮助

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对象分配给别名类型?如果类型不相同,并且不能从一种类型分配到另一种类型,那么为什么要使用别名类型呢?