使用反射,如何将值设置为结构字段(指针)

时间:2019-07-22 12:42:13

标签: go reflect

我尝试通过反射将值设置为结构字段(指针字段),但是失败了。

  1. 我获得了结构字段的名称,所以使用FieldByName来获取字段
  2. 该字段是一个指针。
  3. 我尝试使用FieldByName()。设置FieldByName()。SetPointer来设置值。
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.ValueOf(t).FieldByName("b").Set(a)
}
type t struct {
    b *int
}

func main() {
    t := new(ts)
    a := new(int)
    ss := reflect.ValueOf(t).FieldByName("b").SetPointer(a)
}

第一个代码: =======> ./test.go:14:50:不能在参数中使用(类型* int)作为类型reflect.Value来反射reflect.ValueOf(t).FieldByName(“ b”)。Set ./test.go:14:50:Reflection.ValueOf(t).FieldByName(“ b”)。Set(a)用作值

第二个代码: =======> ./test.go:14:57:不能在参数insafe中使用(类型* int)类型unpoint.Pointer来反映.ValueOf(t).FieldByName(“ b”)。SetPointer ./test.go:14:57:反射.ValueOf(t).FieldByName(“ b”)。SetPointer(a)用作值

我想使用反射使指针字段(名称“ b”)分配一个空间并设置一个值。

1 个答案:

答案 0 :(得分:3)