2 回答

TA贡献1876条经验 获得超6个赞
您试图断言它Config.Data
是 type *TestData
,但您将它分配给了TestData{"http", "8080"}
上面。您可以使用复合文字的地址来创建指针:
Config.Data = &TestData{"http", "8080"}
如果您的配置已经存在,您的Read
方法将Data
使用默认的 json 数据类型填充该字段,可能是map[string]interface{}
. 如果您将正确类型的指针分配给Data
first,它将解码为预期的类型。
Config.Data = &TestData{}
Ans 因为Data
是 an interface{}
,所以您不想使用指向该值的指针,因此&
在编组和解组时不要使用该运算符。

TA贡献1817条经验 获得超14个赞
您遇到错误的原因是因为您正在尝试解码为一种interface{}类型。在处理 JSON 对象时,它们map[string]interface{}默认由 encoding/json 包解码成类型。这会导致类型断言失败,因为 map[string]interface{} 的内存结构与结构的内存结构大不相同。
更好的方法是使您的 TestData 结构体成为您的配置结构体的预期数据格式:
// Base configuration struct
type Configuration struct {
Filename string
Data *TestData
}
然后在对文件数据进行解码时,该包会将数据解组到与其找到的数据最匹配的字段中。
如果您需要对数据解组过程进行更多控制,您可以使用结构标记指定将哪些 JSON 字段解码为哪些结构成员。您可以在此处阅读有关 json 结构标记的更多信息:https : //golang.org/pkg/encoding/json/#Marshal
- 2 回答
- 0 关注
- 167 浏览
添加回答
举报