首頁 > 後端開發 > Golang > 為什麼使用指標時 `json.Unmarshal` 失敗,但使用引用時成功?

為什麼使用指標時 `json.Unmarshal` 失敗,但使用引用時成功?

DDD
發布: 2024-11-19 20:05:03
原創
420 人瀏覽過

Why Does `json.Unmarshal` Fail When Using a Pointer but Succeed with a Reference?

解組JSON:揭示引用與指標之間的差異

在JSON 解析領域,json.Unmarshal 是不可或缺的工具。然而,它的行為有時會令人費解。具體來說,使用者可能想知道為什麼在使用引用時解組工作順利,但在使用指標時卻神秘地失敗了。讓我們深入探討這個問題的本質。

引用與指標

在第一個範例中,我們將「animals」定義為 Animal 類型變數。當我們將“&animals”傳遞給 Unmarshal 時,我們提供了對此變數的引用。這允許Unmarshal直接操作原始結構。

相反,第二個範例將「animals」宣告為指向Animal類型的指標。指標保存另一個變數的位址,而不是變數本身。將「動物」直接傳遞給 Unmarshal 意味著我們正在傳遞一個 nil 指針,因為它尚未初始化。

悖論

奇怪的是,Unmarshal 的文件指出:如果指標為零,它可以為指標分配一個新值。那麼,為什麼第二個範例會失敗?

揭開錯誤

第二個範例中的錯誤訊息實際上是 InvalidUnmarshalError。當傳遞給 Unmarshal 的參數是無效指標時,會引發此錯誤。儘管文件有這樣的聲明,Unmarshal 確實需要一個非零指標作為參數。

底線

要使用指標正確解組 JSON,您必須初始化它第一的。正如文件所暗示的,這可以透過在呼叫 Unmarshal 之前簡單地為指標指派一個有效值來完成。

Unmarshalling 與 Unmarshaling

此外,您可能已經注意到該文件同時使用「解組」和「解組」。雖然這兩種拼字都被認為是正確的,但「unmarshaling」是 Go 社群中更常見和首選的用法。

以上是為什麼使用指標時 `json.Unmarshal` 失敗,但使用引用時成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板