我有以下代码,主要编组和取消编组时间结构。这是代码package mainimport ( "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?如何防止这种情况?谢谢。
1 回答
largeQ
TA贡献2039条经验 获得超7个赞
Go vet 会准确告诉您问题出在哪里:
./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)
{2009-11-10 23:00:00 +0000 UTC} <nil> <nil> {2009-11-10 23:00:00 +0000 UTC}
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消