Golang:反射机制reflect

目录

反射

基本概念

变量的内在机制

Go的反射三定律

反射的使用

空接口与反射

结构体与反射

函数与反射

反射的实际运用场景 


反射

基本概念

反射是指在程序运行期对程序本身进行访问和修改的能力。Golang反射是通过接口来实现的,通过隐式转换,普通的类型被转换成interface类型,这个过程涉及到类型转换的过程,首先从Golang类型转为interface类型, 再从interface类型转换成反射类型, 再从反射类型得到想的类型和值的信息。

变量的内在机制

  • 变量包含类型信息和值信息 var arr [10]int arr[0] = 10
  • 类型信息:是静态的元信息,是预先定义好的
  • 值信息:是程序运行过程中动态改变的

Go的反射三定律

  • Golang对象可以转换成反射对象
  • 反射对象可以转换成Golang对象
  • 可寻址的reflect对象可以更新值

反射的使用

  • reflect包封装了反射相关的方法
  • 获取类型信息:reflect.TypeOf,返回reflect.Type类型
  • 获取值信息:reflect.ValueOf,返回reflect.Value类型
  • reflect.Value.Kind,获取变量的类别,返回一个常量
  • reflect.Value.Interface(),转换成interface{}类型

空接口与反射

  • 反射可以在运行时动态获取程序的各种详细信息
  • 反射获取interface类型信息
    package main
    
    import (
       "fmt"
       "reflect"
    )
    
    //反射获取interface类型信息
    
    func reflect_type(a interface{}) {
       t := reflect.TypeOf(a)
       fmt.Println("类型是:", t)
       // kind()可以获取具体类型
       k := t.Kind()
       fmt.Println(k)
       switch k {
       case reflect.Float64:
          fmt.Printf("a is float64\n")
       case reflect.String:
          fmt.Println("string")
       }
    }
    
    func main() {
       var x float64 = 3.4
       reflect_type(x)
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LCS-312

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值