反射的基本使用package main
import (
"fmt"
"reflect"
)
//定义个结构体类型
type Stu struct {
Age int
Name string
}
//給结构添加一个方法 注意添加方法不是指针
func (stu Stu) Study() {
fmt.Printf("stu is study %v\n", stu)
}
func reflectObj(arg interface{}) {
//获取变量的类型、这里的type是指变量所属类型,包括原生类型
inputType := reflect.TypeOf(arg)
fmt.Println("type: ", inputType)
//kind 指变量类型所属 大类
fmt.Println("kind: ", inputType.Kind())
//获取变量值
inputValue := reflect.ValueOf(arg)
fmt.Println("value: ", inputValue)
//获取变量的字段
for i := 0; i < inputType.NumField(); i++ {
//获取字段
field := inputType.Field(i)
//获取字段值
value := inputValue.Field(i).Interface()
fmt.Println("field: ", field.Name, "value: ", value)
}
//获取方法
for i := 0; i < inputType.NumMethod(); i++ {
m := inputType.Method(i)
fmt.Println("method name: ", m.Name, "method type: ", m.Type)
}
}
func main() {
//声明一个变量
stu := Stu{12, "xiaogang"}
reflectObj(stu)
}