2
我想構建一個庫,可以從JSON文件中讀取多個不同類型的對象(實際庫將它們從couchdb中拉出來,但爲了這個目的,它將從json中加載它們)。Go中的JSON解碼會更改對象類型?
我的庫並不知道正在加載的對象的具體類型,因此下面的「CreateObject()」調用(由實際代碼中的接口滿足)。
我有一個問題,當我嘗試投用的CreateObject(創建對象)叫回我的具體類型(在本例中的MyType)我得到了恐慌:
panic: interface conversion: interface is map[string]interface {}, not main.MyType
我想知道我在哪裏出了問題,或者是否還有其他更類似於我應該接近這個問題的方式。如果我在Java中使用它,我會使用泛型,並期望它很簡單。
請注意,如果我註釋掉json.NewDecoder ...行,代碼將工作(按預期打印出空行)。這意味着解碼操作正在發生。
Runnable的例子如下:
package main
import (
"encoding/json"
"fmt"
"strings"
)
type MyType struct {
Name string `json:"name"`
Age int32 `json:"age"`
}
func CreateObject() interface{} {
return MyType{}
}
func LoadJsonData() interface{} {
obj := CreateObject()
jsonStr := `{"name":"Person", "age":30}`
json.NewDecoder(strings.NewReader(jsonStr)).Decode(&obj)
return obj
}
func main() {
obj := LoadJsonData()
// This works for some reason
// y := obj.(map[string]interface{})
// fmt.Println(y["name"])
// This causes a panic
x := obj.(MyType)
fmt.Println(x.Name)
}