我正在尝试构建一个可以从 JSON 文件中读取多种不同类型对象的库(实际库将它们从 couchdb 中提取出来,但为此目的,它是从 json 加载它们)。我的库对加载的具体对象类型一无所知,因此下面的“CreateObject()”调用(由实际代码中的接口满足)。我遇到了一个问题,当我尝试将 CreateObject() 调用创建的对象转换回我的具体类型(示例中的 MyType)时,我感到恐慌:panic: interface conversion: interface is map[string]interface {}, not main.MyType我想知道我在这里哪里出错了,或者是否有另一种更类似的方式来解决这个问题。如果我在 Java 中做这件事,我会使用泛型并且希望它很简单。请注意,如果我注释掉 json.NewDecoder... 行,则代码有效(按预期打印出一个空行)。这意味着在解码操作中发生了一些事情。可运行示例如下:package mainimport ( "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)}
1 回答
- 1 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消