首页 > 其他 > 详细

Golang对基本数据类型和结构体进行反射

时间:2021-02-15 23:16:17      阅读:30      评论:0      收藏:0      [点我收藏+]

具体代码

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)
}

结果

技术分享图片

Golang对基本数据类型和结构体进行反射

原文:https://www.cnblogs.com/pangqianjin/p/14404338.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!