动态访问嵌套结构值
Dynamically Access Nested struct values
我正在尝试根据从数据库中获取的路径访问 属性:
例如在 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)
}
但是好像不行
此代码只是对您尝试过的内容的总结,并且有效
package main
import (
"fmt"
"reflect"
"strings"
)
type Vehicle struct {
Manufacturer Manufacturer
VehicleNumber string
}
type Manufacturer struct {
ManufacturerName string
}
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)
}
func main() {
var vehicle = Vehicle{
Manufacturer: Manufacturer{
ManufacturerName: "hello",
},
}
value := exportValueFromField(vehicle, "Manufacturer.ManufacturerName")
fmt.Println(value)
}
我正在尝试根据从数据库中获取的路径访问 属性:
例如在 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)
}
但是好像不行
此代码只是对您尝试过的内容的总结,并且有效
package main
import (
"fmt"
"reflect"
"strings"
)
type Vehicle struct {
Manufacturer Manufacturer
VehicleNumber string
}
type Manufacturer struct {
ManufacturerName string
}
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)
}
func main() {
var vehicle = Vehicle{
Manufacturer: Manufacturer{
ManufacturerName: "hello",
},
}
value := exportValueFromField(vehicle, "Manufacturer.ManufacturerName")
fmt.Println(value)
}