直接上代码,初略的写了一下,具体使用按照自身逻辑改改。
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)
}
}