【发布时间】:2019-12-10 02:30:53
【问题描述】:
去游乐场:https://play.golang.org/p/ck3PtydW3YT
我有一个类似的结构:
type Input struct {
InputA *InputA
InputB *InputB
InputC *InputC
}
我正在尝试使用反射将第一个值(在本例中为 *InputA)设置为零值(&InputA{}),但它不起作用:
actionInput = Input{}
v := reflect.ValueOf(actionInput)
i := 0
typ := v.Field(i).Type()
inputStruct := reflect.New(typ).Elem().Interface()
reflect.ValueOf(&actionInput).Elem().Field(i).Set(reflect.ValueOf(inputStruct))
我猜这是因为它是一个指针,但我不确定如何解决这个问题
【问题讨论】:
-
您将第一个字段设置为零值。指针的零值为 nil。如果需要将其设置为指向结构零值的指针,则必须创建该结构的新实例,获取指向该结构的指针,然后设置它。
-
这就是我在定义
inputStruct时尝试做的事情,但显然这会创建一个新的“*InputA”,而不是一个新的“InputA”。这是有道理的,但我不知道如何根据我的意图解决这个问题。 -
如果你想要一个新的
InputA,那就是reflect.New(v.Field(i).Elem().Type()).Interface()。
标签: go reflection