反射的示意图:
反射的应用场景:
反射重要的函数和概念
反射的快速入门
案例一:演示对(基本数据类型、interface{}、reflect.Value)进行反射的基本操作
package main
import (
"reflect"
"fmt"
)
// 专门演示反射
func reflectTest01(b interface{}){
//通过反射获取的传入的变量的type, kind, 值
//1. 先获取到reflect.Type
rTyp := reflect.TypeOf(b)
fmt.Println("rTyp=", rTyp) //输出:rTyp=int
//2. 获取到reflect.Value
rVal := reflect.ValueOf(b)
fmt.Println("rVal=", rVal) //输出:rVal=100 //但这不是普通的100, 这是relfect.Value, 不能执行10+rVal
//fmt.Println("rVal=%v, TypeOf(rVal)=%T\n", rVal, rVal)
// 那如果想要用10+这个reflect.Value,应该如何做呢
fmt.Println("rVal+10=", rVal.Int() + 10)
//3. 将rVal转成interface{}
iV := rVal.Interface()
//4. 将interface{}通过断言转成需要的类型
num2 := iV.(int)
fmt.Println("num2=", num2)
}
func main(){
//请编写一个案例
//演示对(基本数据类型、interface{}、reflect.Value)进行反射的基本操作
//1. 先定义一个int
var num int = 100
reflectTest01(num)
}
运行结果:
rTyp= int
rVal= 100
rVal+10= 110
num2= 100