【发布时间】:2021-07-22 21:17:56
【问题描述】:
我正在尝试根据从数据库中获取的路径访问属性:
例如在 struct Vehicle 中,
type Vehicle struct {
core.Model
Manufacturer Manufacturer
VehicleNumber string
.....
}
type Manufacturer struct {
ManufacturerName string
....
}
我想获取
value := exportValueFromField(vehicle,"Manufacturer.ManufacturerName")
func exportValueFromField(data interface{}, index string) string {
indexArray := strings.Split(index, ".")
r := reflect.ValueOf(data)
for _, i := range indexArray {
if r.FieldByName(i).Kind() == reflect.Struct {
r = reflect.ValueOf(r.FieldByName(i).Interface())
}else {
r = r.FieldByName(i)
}
}
return fmt.Sprintf("%v", r)
}
但它似乎不起作用
【问题讨论】:
-
您能否详细说明“它似乎不起作用”?您看到什么错误或其他意外行为?
-
当它只是一个级别时,例如 exportValueFromField(vehicle,"VehicleNumber") 它可以工作。
-
但是当它是 exportValueFromField(vehicle,"Manufacturer.ManufacturerName") 它只返回空字符串
-
我试过你的方法,对我有用
-
确保该字段实际上不是空字符串
标签: go reflection