解組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中文網其他相關文章!