我匿名组合了一个指针
type Type1 struct {
}
type Type2 struct {
*Type1
}
type Type3 struct {
*Type1
}
现在有很多类型 Type2,Type3……都匿名组合了一个*Type1 我用一个 var i interface{} 来装这些类型(Type2 Type3……)的实例,我现在怎样才能为 i 的*Type1 赋值?
我的代码是这样的写的:
v := reflect.ValueOf(i) f := v.FieldByName("Type1") v.SetPointer(unsafe(&Type1{})
得到错误: reflect: call of reflect.Value.SetPointer on zero Value
谢谢各位的回帖,我的问题最终是这样的:
package p1 type Type1 struct{ } /package p1 end/
pckage p2 import "p1" type Type2 struct{ *p1.Type1 }
我在用 FieldByName 查找 Type2 的匿名组合的指针时用的名字是"p1.Type1",实际上不应该包含包名而直接用“Type1”查找就 OK 了。