为了账号安全,请及时绑定邮箱和手机立即绑定

通过反射创建类型并通过引用传递可以编译但不起作用

通过反射创建类型并通过引用传递可以编译但不起作用

Go
慕运维8079593 2023-07-17 17:11:30
当我动态创建一个指向类型的指针,然后将其传递给解组函数时,理论上它似乎是正确编写的: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 方法,而是打印它们所保存的具体值。


查看完整回答
反对 回复 2023-07-17
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信