285_尚硅谷_反射的快速入门(1)
1.反射的快速入门
2.案例1. 请编写一个案例,演示对(基本数据类型、interface{}、reflect.Vaiue)进行反射的基本操作_代码
package main
import (
"fmt"
"reflect" // ! 反射用的包
)
// todo 1.1 专门演示反射的函数, 通过反射获取的传入的变量type, kind, 值
func reflectTest01(num interface{}) {
// * 1. 先获取到 reflect.Type【反射类型】, 使用reflect.TypeOf()方法
rType := reflect.TypeOf(num)
fmt.Println("=============== 1. 先获取到 reflect.Type【反射类型】, 使用reflect.TypeOf()方法 ===============")
fmt.Println(rType)
// * 2. 获取到 reflect.Value【反射值】, 使用reflect.ValueOf()方法
fmt.Println("=============== 2. 获取到 reflect.Value【反射值】, 使用reflect.ValueOf()方法 ===============")
rVal := reflect.ValueOf(num)
n1 := 10
n2 := 2 + n1
fmt.Println("--------------- 2.1 int类型计算, n1+n2 ---------------")
fmt.Println(n2)
// ! 注意: rVal直接输出会返回 100,但是不是int类型, 不能直接执行 rVal + 2, rVal类型是reflect.Value, 可以使用反射里的所有方法
fmt.Println("--------------- 2.2 rVal 和 rVal type ---------------")
fmt.Printf("rVal= %v, rVal type= %T\n", rVal, rVal)
// 对rVal进行类型转换, 执行和int做算法操作
n3 := rVal.Int() + 2
fmt.Println("--------------- 2.3 对rVal进行类型转换成Int后(rVal.Int()方法), 在执行和int做算法操作n3 ---------------")
fmt.Println(n3)
// * 3. 将rVal转成interface{}类型
iV := rVal.Interface()
fmt.Println("=============== 3. 将rVal转成interface{}类型 ===============")
fmt.Printf("iV= %v, iV type= %T\n", iV, iV)
// * 4. 将interface{}通过类型断言转成原来的类型
n4 := iV.(int)
fmt.Println("=============== 4.将interface{}通过类型断言转成原来的类型n4 ===============")
fmt.Printf("n4= %v, n4 type= %T\n", n4, n4)
}
// todo 1. 请编写一个案例,演示对(基本数据类型、interface{}、reflect.Vaiue)进行反射的基本操作
func main() {
// 1.1 先定义一个int
var num int = 100
// 1.2 获取name的反射类型对象
reflectTest01(num)
}
3.案例1. 请编写一个案例,演示对(基本数据类型、interface{}、reflect.Vaiue)进行反射的基本操作_运行结果
浙公网安备 33010602011771号