package main
import("fmt""reflect")funcmain(){
dog := Dog{"小白",30,"男"}
getType := reflect.TypeOf(dog)
getValue := reflect.ValueOf(dog)
fmt.Println(getType)
fmt.Println(getValue)//获取狗字段的值for i :=0; i < getType.NumField(); i++{
field := getType.Field(i)
value := getValue.Field(i).Interface()
fmt.Println(field)
fmt.Println(value)}//获取无参方法
fmt.Println("========================")
methodValue1 := getValue.MethodByName("PrintInfo")//对方法值进行调用
methodValue1.Call(nil)//获取有参方法
fmt.Println("========================")
methodValue2 := getValue.MethodByName("Say")
args2 :=[]reflect.Value{reflect.ValueOf("反射机制")}//对有参方法值进行调用
methodValue2.Call(args2)}type Dog struct{
Name string
Age int
Sex string}//有参方法func(d Dog)Say(msg string){
fmt.Println(msg)}//无参方法func(d Dog)PrintInfo(){
fmt.Println(d.Name)
fmt.Println(d.Age)
fmt.Println(d.Sex)}