golang 通过反射获取结构体字段值,以及字段为结构体类型的字段。

直接上代码,初略的写了一下,具体使用按照自身逻辑改改。

package main

import (
    "fmt"
    "reflect"
)

type Student struct {

    Class string

    School string

    Love string

    StudentBase
}

type StudentBase struct {
    Name string
    Age  int
}

func main() {

    var student Student

    student.Class = "三年一班"
    student.School = "附属小学"
    student.Love = "阅读、游戏"
    student.Name = "李华"
    student.Age = 8

    t := reflect.TypeOf(student)

    if t.Kind() == reflect.Ptr {
        t = t.Elem()
    }

    for i := 0; i < t.NumField(); i++ {
        fieldName := t.Field(i).Name

        //struct 字段
        if fieldName == "StudentBase" {

            fmt.Println("Struct Property StudentBase")
            child := t.Field(i).Type
            if child.Kind() == reflect.Struct {

                for j := 0; j < child.NumField(); j++ {

                    jFieldName := child.Field(j).Name
                    jFieldValue := reflect.ValueOf(student.StudentBase).FieldByName(jFieldName)

                    fmt.Println("name:", jFieldName, "value:", jFieldValue)
                }
                continue
            }
        }
        fieldValue := reflect.ValueOf(student).FieldByName(fieldName)
        fmt.Println("name:", fieldName, "value:", fieldValue)
    }

}
原文地址:https://www.cnblogs.com/aqgy12138/p/15687198.html