我有以下代碼,主要編組和取消編組時間結構。這是代碼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條經驗 獲得超8個贊
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 關注
- 168 瀏覽
添加回答
舉報
0/150
提交
取消