package main
import (
"fmt"
"reflect"
)
// 1.对基本数据类型、interface{}、reflect.Value进行转换
func ReflectTest1(in interface{}){
// 通过反射获取传入的变量的type, kind
// 1.先获取到 reflect.Type
rType := reflect.TypeOf(in)
fmt.Printf("rType类型为%T,值为%v\n", rType, rType)
// 2.获取到 reflect.Value
rVal := reflect.ValueOf(in)
fmt.Printf("rVal类型为%T,值为%v\n", rVal, rVal)
// 获取变量对应的 kind
// 1) rVal.Kind() ===>
// 2) rType.Kind() ===>
fmt.Printf("Kind =%v, kind =%v\n", rVal.Kind(), rType.Kind())
// 3.将 rVal 转成 interface{}
iv := rVal.Interface()
fmt.Printf("iv类型为%T,值为%v\n", iv, iv)
// 将 interface{} 通过类型断言转为需要的类型
num := iv.(int)
fmt.Printf("num类型为%T,值为%v\n\n", num, num)
}
func ReflectTest2(in interface{}){
// 通过反射获取传入的变量的type, kind
// 1.先获取到 reflect.Type
rType := reflect.TypeOf(in)
fmt.Printf("rType类型为%T,值为%v\n", rType, rType)
// 2.获取到 reflect.Value
rVal := reflect.ValueOf(in)
fmt.Printf("rVal类型为%T,值为%v\n", rVal, rVal)
// 获取变量对应的 kind
// 1) rVal.Kind() ===>
// 2) rType.Kind() ===>
fmt.Printf("Kind =%v, kind =%v\n", rVal.Kind(), rType.Kind())
// 3.将 rVal 转成 interface{}
iv := rVal.Interface()
fmt.Printf("iv类型为%T,值为%v\n", iv, iv)
// 将 interface{} 通过类型断言转为需要的类型
stu := iv.(Student)
fmt.Printf("stu类型为%T,值为%v\n\n", stu, stu)
}
type Student struct{
Name string
Age int
}
func main(){
// 1.对基本数据类型、interface{}、reflect.Value进行转换
var num int = 100
ReflectTest1(num)
// 2.对结构体的反射
var stu Student = Student{"Tom", 20}
ReflectTest2(stu)
}
原文:https://www.cnblogs.com/pangqianjin/p/14404338.html