当我动态创建一个指向类型的指针,然后将其传递给解组函数时,理论上它似乎是正确编写的:x := reflect.New(structType)
decode(x)但是,当您打印 时x,它看起来像是该类型的零值。该类型绝对是正确且符合预期的。另一方面,当我创建类型并直接传递指向它的指针时,它工作得很好:directoryEntry := DirectoryEntry{}
decode(&directoryEntry)内容已正确设置decode(),并且打印时是正确的。那么,看来我必须将类型的值传递给decode()而不是引用?有人能指出我必须缺少什么吗?一些谷歌查询没有帮助,看来我一定错过了一些小东西。
1 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
reflect.New()
返回一个指向所传递类型的值的指针,但返回的指针被包装在一个reflect.Value
结构中!
用于Value.Interface()
“解开”它,并有一个指针作为interface{}
您可以传递给的decode()
:
x := reflect.New(structType) p := x.Interface() decode(p)
当您打印 a 时reflect.Value
,您通常不会看到差异,因为reflect.Value
类型被特殊对待;引用自Value.String()
:
fmt 包特别对待 Values。它不会隐式调用它们的 String 方法,而是打印它们所保存的具体值。
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消