在display
函数内部,您声明valueValue
为:
valueValue := reflectValue.Field(i).Interface()
所以valueValue
是类型interface{}
。在for循环中,您可以递归调用display
:
display(&valueValue)
因此它使用type参数进行调用*interface{}
。在递归调用内部,reflectType
将代表interface{}
而不是恰好存储在值中的类型。由于NumField
只能在reflect.Type
的代表结构上调用,因此您会感到恐慌。
如果您想使用指向结构的指针来调用display,则可以使用类似以下的方法:
v := valueValue := reflectValue.Field(i).Addr() display(v.Interface())