go - golang反射将结构的第一个值设置为零值
问题描述
去游乐场: 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))
我猜这是因为它是一个指针,但我不知道如何解决这个问题
解决方案
下面的代码应该可以工作。如果该字段是一个指针,它会创建该指针指向的类型的实例,并设置它。
typ := v.Field(i).Type()
var inputStruct reflect.Value
if typ.Kind()==reflect.Ptr {
inputStruct=reflect.New(typ.Elem())
} else {
inputStruct = reflect.New(typ).Elem()
}
reflect.ValueOf(&actionInput).Elem().Field(i).Set(inputStruct)
推荐阅读
- ios - Ionic 3,IOS,应用内购买
- java - 元数据提取器类文件无法在 java 类中导入
- algorithm - 用一个常数因子确定嵌套循环的时间和空间复杂度
- classification - KNIME - 多个属性上的字符串到文档节点
- google-maps - Google Places API - 地点详细信息查找的“place_id”结果不正确
- swagger-editor - 为什么 Swagger Editor 不发送 Cookie 标头?
- java - FileDescriptor.in 与 System.in
- android - mapping.txt 中的数字部分是什么
- java - 通过 selenium 在 paytm 主页上发起搜索的问题
- java - when an item in an out of the 2 spinner view is selected, other should be auto filled. 所有这些仅使用 assets 文件夹中的本地 json 文件