zoukankan      html  css  js  c++  java
  • Golang对基本数据类型和结构体进行反射

    具体代码

    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
    ", rType, rType)
    
    	// 2.获取到 reflect.Value
    	rVal := reflect.ValueOf(in)
    	fmt.Printf("rVal类型为%T,值为%v
    ", rVal, rVal)
    	
    	// 获取变量对应的 kind
    	// 1) rVal.Kind() ===>
    	// 2) rType.Kind() ===>
    	fmt.Printf("Kind =%v, kind =%v
    ", rVal.Kind(), rType.Kind())
    	
    	// 3.将 rVal 转成 interface{}
    	iv := rVal.Interface()
    	fmt.Printf("iv类型为%T,值为%v
    ", iv, iv)
    
    	// 将 interface{} 通过类型断言转为需要的类型
    	num := iv.(int)
    	fmt.Printf("num类型为%T,值为%v
    
    ", num, num)
    }
    
    func ReflectTest2(in interface{}){
    	// 通过反射获取传入的变量的type, kind
    	// 1.先获取到 reflect.Type
    	rType := reflect.TypeOf(in)
    	fmt.Printf("rType类型为%T,值为%v
    ", rType, rType)
    	
    	// 2.获取到 reflect.Value
    	rVal := reflect.ValueOf(in)
    	fmt.Printf("rVal类型为%T,值为%v
    ", rVal, rVal)
    
    	// 获取变量对应的 kind
    	// 1) rVal.Kind() ===>
    	// 2) rType.Kind() ===>
    	fmt.Printf("Kind =%v, kind =%v
    ", rVal.Kind(), rType.Kind())
    
    	// 3.将 rVal 转成 interface{}
    	iv := rVal.Interface()
    	fmt.Printf("iv类型为%T,值为%v
    ", iv, iv)
    	
    	// 将 interface{} 通过类型断言转为需要的类型
    	stu := iv.(Student)
    	fmt.Printf("stu类型为%T,值为%v
    
    ", 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)
    }
    

    结果

  • 相关阅读:
    mybatis 自定义插件的使用
    mybatis的TypeHandler 的使用
    css水平居中的各种方法
    ASP.Net MVC——DotNetZip简单使用,解决文件压缩问题。
    TinyMCE的使用(包括汉化及本地图片上传功能)
    ASP.Net MVC——使用 ITextSharp 完美解决HTML转PDF(中文也可以)
    关于项目中值对象Identifier的设计-领域驱动
    B/S工作原理
    大学期间项目笔记
    C#反射机制
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14404338.html
Copyright © 2011-2022 走看看