
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)
}

原文:https://www.cnblogs.com/nextworld/p/14993637.html