首頁  >  文章  >  後端開發  >  為什麼在 Go 中解組為未初始化的指標失敗?

為什麼在 Go 中解組為未初始化的指標失敗?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-21 00:50:12855瀏覽

Why Does Unmarshaling into an Uninitialized Pointer Fail in Go?

解組為引用和指標

在將JSON 資料反序列化為Go 結構的過程中,json.Unmarshal 函數起著至關重要的作用。但是,使用者在嘗試解組為引用和指標時可能會遇到差異。

請考慮以下程式碼片段:

// Unmarshaling into a reference variable
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)

此程式碼成功將 JSON 資料解組為動物引用變數。

但是,當嘗試解組為指標時會出現不同的結果變數:

// Unmarshaling into a pointer variable
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)

在這種情況下,Unmarshal 失敗並出現一個模糊錯誤:「json: Unmarshal( nil *main.Animal)」。遇到此錯誤是因為 Animals 是一個未初始化的指標。

Unmarshal 的文檔指出「如果指標為 nil,Unmarshal 會為其分配一個新值來指向。」但是,此行為似乎不適用於未初始化指標的情況,如錯誤訊息所示。

要解決此問題,建議在嘗試解組到指標變數 Animals 之前初始化它:

animals = &Animal{}
err := json.Unmarshal(jsonBlob, animals)

透過此修改,解組過程應該會成功。

請注意,在文件中,術語「unmarshaling」被一致使用。

以上是為什麼在 Go 中解組為未初始化的指標失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn