285_尚硅谷_反射的快速入门(1)

1.反射的快速入门1.反射的快速入门

2.案例1. 请编写一个案例,演示对(基本数据类型、interface{}、reflect.Vaiue)进行反射的基本操作_代码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)进行反射的基本操作_运行结果3.案例1. 请编写一个案例,演示对(基本数据类型、interface{}、reflect.Vaiue)进行反射的基本操作_运行结果

posted on 2026-03-08 15:27  与太阳肩并肩  阅读(1)  评论(0)    收藏  举报

导航