使用 json.Unmarshal 解組 JSON 資料時,為目標變數提供具體類型以避免意外轉換非常重要。
在您提供的程式碼中,您定義了一個函數 getFoo() ,它會傳回一個包含 Foo 的介面結構。當您將此介面傳送到 json.Unmarshal 時,它會將值解釋為映射,而不是具體結構。
要解決此問題,您可以在介面中傳遞指向特定結構的指針,也可以指定直接在json.Unmarshal.
這裡是一個使用具體結構類型的範例指標:
func getFoo() interface{} { return &Foo{"bar"} } func main() { fooInterface := getFoo() jsonBytes := []byte(`{"bar":"This is the new value of bar"}`) err := json.Unmarshal(jsonBytes, fooInterface) if err != nil { fmt.Println(err) } fmt.Println(fooInterface) // *main.Foo &{Bar:This is the new value of bar} }
或者,您可以使用類型斷言來指定具體類型:
func main() { fooInterface := getFoo() jsonBytes := []byte(`{"bar":"This is the new value of bar"}`) foo := fooInterface.(*Foo) err := json.Unmarshal(jsonBytes, foo) if err != nil { fmt.Println(err) } fmt.Println(foo) // &{Bar:This is the new value of bar} }
透過指標或類型斷言提供具體類型,您可以確保json.Unmarshal直接將資料解組到所需的結構中,保留其類型資訊和欄位值。
以上是為什麼使用介面而不是結構時'json.Unmarshal”會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!