將 JSON 解組為特定結構
處理複雜資料結構時,通常需要將 JSON 解組為特定結構而非介面。但是,當目標是介面時,json.Unmarshal 的預設行為是將 JSON 資料轉換為映射。
問題說明
在提供的範例中, getFoo 函數傳回一個包裝具體 Foo 結構的 interface{} 值。當使用此值呼叫 json.Unmarshal 時,它會建立一個映射,而不是使用底層 Foo 結構,因為介面{}類型本身無法提供足夠的資訊來解組。
解決方案:明確傳遞結構體參考
要解決此問題,需要明確傳遞指向具體結構體的指針json.Unmarshal。這確保解碼器可以識別正確的結構類型:
func getFoo() interface{} { return &Foo{"bar"} }
透過返回指向結構的指針,interface{} 包裝器現在包含對具體類型的引用,允許 json.Unmarshal 解組資料正確。
注意:
重要的是要注意當編譯時未知特定結構類型時,適用此解決方案。如果結構類型已知,最好將其直接傳遞給 json.Unmarshal,以獲得更好的類型安全性和性能。
以上是使用「interface{}」時如何將 JSON 解組為 Go 中的具體結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!