package main
import (
"fmt"
"reflect"
)
type Student struct {
name string
age int
}
func (s Student) Set(name string, age int) {
s.name = name
s.age = age
}
func test(b interface{}) {
val := reflect.ValueOf(b)
kd := val.Kind()
//判断是否为结构体
switch kd {
case reflect.Struct:
{
t := reflect.TypeOf(b)
fmt.Println(t)
//获取值
value := reflect.ValueOf(b)
//获取值类型
ty := value.Interface()
//转化为实际类型
ss, ok := ty.(Student)
if ok {
fmt.Println(ss)
}
//通过反射获取方法个数
Count := value.NumMethod()
fmt.Printf("has %d Method\n", Count)
}
case reflect.Int:
{
t := reflect.TypeOf(b)
fmt.Println(t)
}
}
}
func testInt(n interface{}) {
val := reflect.ValueOf(n)
//获取值
c := val.Elem().Int()
fmt.Println(c)
//设置值
val.Elem().SetInt(100)
fmt.Println(val.Elem().Int())
}
func main() {
//通过反射,获取变量信息
s := Student{"break", 18}
test(s)
//通过反射,修改
var nNum int = 10
testInt(&nNum)
}