动态访问嵌套结构值

我正在尝试根据我从数据库获取的路径访问属性:


例如,在结构车辆中,



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)

   }

但它似乎不起作用


qq_笑_17
浏览 105回答 1
1回答

有只小跳蛙

此代码只是您尝试的内容的回顾,并且有效package mainimport (    "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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go