1 回答

TA贡献1773条经验 获得超3个赞
unmarshal 函数遍历指针和包含指针值的接口以找到目标值。接口中的非指针值将被忽略,因为这些值不可寻址。(此描述省略了对问题不重要的细节)。
如果目标是 aninterface{}
并且 JSON 是对象,则 JSON 被解组为 amap[string]interface{}
并将该值存储在接口中。
测试 1:解组的参数是*Test
。unmarshal 函数遍历指针并解码为Test
结构。
测试 2:unmarshal 的参数是指向interface{}
包含Test
. unmarshal 函数遍历指针以获取interface{}
. Test
中的值被interface{}
忽略,因为它不可寻址。因为目标是 aninterface{}
而 JSON 是对象,所以 JSON 被解码为map[string]interface{}
.
3、4、5 和 6 中的代码无法编译。假设删除了{}
以下内容,我将继续Test
。
var o2 Test = o // 3
var o2 *Test = &o // 4
var o2 *Test = &o // 5
var o2 *Test = &o // 6
测试 3 和 5:unmarshal 的参数是一个*Test
. 这与#1 相同。
测试 4 和 6:参数是一个**Test
. unmarshal 函数遍历指针并解码到Test
结构。
因为 Go 没有任何类似“超类”的东西,所以这不是问题。
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报