动态访问嵌套结构值

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)
}