我正在尝试设置struct.field =& otherStruct。但是,我必须使用反射,而otherStruct是interface {}类型。
我得到的错误是:
reflect.Set: value of type main.StructB is not assignable to type *main.StructB
结构已知。 (实际)类型的otherStruct是未知的,但保证了赋值是安全的(结构类型是相同的)。
代码:
type StrucA struct {
Field *StrucB
}
type StrucB struct {}
func main() {
a := StrucA{}
var b interface{} = StrucB{}
//above is set
// Target: Set a.Field = &b
reflect.ValueOf(&a).Elem().FieldByName("Field").Set(reflect.ValueOf(b)) // reflect.Set: value of type main.StrucB is not assignable to type *main.StrucB
}
游乐场: https://play.golang.org/p/LR_RgfBzsxa
我测试了很多不同的东西,但我无法解决它。
答案 0 :(得分:1)
首先需要分配一个指向b
类型的指针,以便在某处复制值。获得指针值后,您可以将其设置为Field
中的a
:
field := reflect.New(reflect.TypeOf(b))
field.Elem().Set(reflect.ValueOf(b))
reflect.ValueOf(&a).Elem().FieldByName("Field").Set(field)