我有以下代码,主要用于编组和取消编组时间结构。这是代码
package main
import (
"fmt"
"time"
"encoding/json"
)
type check struct{
A time.Time `json:"a"`
}
func main(){
ds := check{A:time.Now().Truncate(0)}
fmt.Println(ds)
dd, _ := json.Marshal(ds)
d2 := check {}
json.Unmarshal(dd, d2)
fmt.Println(d2)
}
这是它产生的输出
{2019-05-20 15:20:16.247914 +0530 IST}
{0001-01-01 00:00:00 +0000 UTC}
第一行是原始时间,第二行是解组后的时间。为什么JSON
转换会导致信息丢失?如何预防呢?
谢谢。
答案 0 :(得分:4)
兽医会准确地告诉您问题出在哪里:
./ prog.go:18:16:Unmarshal的调用将非指针作为第二个参数传递
也从不忽略错误!您至少可以做的是打印它:
ds := check{A: time.Now().Truncate(0)}
fmt.Println(ds)
dd, err := json.Marshal(ds)
fmt.Println(err)
d2 := check{}
err = json.Unmarshal(dd, d2)
fmt.Println(err)
fmt.Println(d2)
这将输出(在Go Playground上尝试):
{2009-11-10 23:00:00 +0000 UTC}
<nil>
json: Unmarshal(non-pointer main.check)
{0001-01-01 00:00:00 +0000 UTC}
您必须将指针传递给json.Unmarshal()
,以使其能够编组(更改)您的值:
err = json.Unmarshal(dd, &d2)
通过此更改,输出将是(在Go Playground上尝试):
{2009-11-10 23:00:00 +0000 UTC}
<nil>
<nil>
{2009-11-10 23:00:00 +0000 UTC}