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

当我动态创建一个指向类型的指针,然后将其传递给解组函数时,理论上它似乎是正确编写的:

x := reflect.New(structType)
decode(x)

但是,当您打印 时x,它看起来像是该类型的零值。该类型绝对是正确且符合预期的。

另一方面,当我创建类型并直接传递指向它的指针时,它工作得很好:

directoryEntry := DirectoryEntry{}
decode(&directoryEntry)

内容已正确设置decode(),并且打印时是正确的。

那么,看来我必须将类型的值传递给decode()而不是引用?

有人能指出我必须缺少什么吗?一些谷歌查询没有帮助,看来我一定错过了一些小东西。


慕运维8079593
浏览 70回答 1
1回答

qq_笑_17

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 方法,而是打印它们所保存的具体值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go