package main
import (
"fmt"
"reflect" // 反射包
)
type User struct{ //结构体类型
Id int
Name string
Age int
}
func (u User) Hello(){ //结构体的方法
fmt.Println("hello")
}
func main(){
u := User{1,"ok",10} //结构体变量
Info(u) //调用info方法,参数为结构体
}
func Info(o interface{}){ //参数为一个接口类型
t := reflect.TypeOf(o) //获取这个结构体的类型
fmt.Println("Type:",t) //打印
v := reflect.ValueOf(o) //获取这个结构体中值
fmt.Println(v) //打印
for i := 0;i < t.NumField(); i++ { //获取这个结构体类型注意是类型,的属性
f := t.Field(i) //获取这个类型[变量t,上面获取到了]的第i个属性
val := v.Field(i).Interface() //获取这个结构体变量[变量v上面获取到]第i的属性的值
fmt.Println(f.Name,f.Type,val) //f.Name 属性名;f.Type 属性类型;val 属性值
}
for i := 0; i < t.NumMethod(); i++ { //循环打印出方法
m := t.Method(i)
fmt.Println(m.Name,m.Type)
}
}
go reflect
最新推荐文章于 2024-07-30 20:50:32 发布