反射reflect
一、引入
Java的反射机制是其标志性的特征之一,正是这种语言本身支持的强大的机制使得很多流行的框架有了用武之地。C++中虽然也能实现,但是语言本身并没有提供标准的支持。
而作为一门现代的语言,go语言也引入了反射机制,在这篇文章中我们将会了解一下go语言中的反射机制是如何使用的。
反射机制
反射机制是程序能够检查其自身结构,属于元编程的范畴,强大的同时也往往是困扰的源头。虽然各种语言的反射模型有所不同,但是通过简单的比较也能有所收获。在了解Go的反射机制之前先来看看Java的反射机制吧。
Java的反射机制
我们所熟知的Java的反射机制是什么?对于类和对象的使用,普通的方式是知道类和对象的属性和方法之后进行调用或者访问。
而反射机制,简单来说,是在运行状态中,Java对于任何的类,都能够确认到这个类的所有方法和属性;对于任何一个对象,都能调用它的任意方法和属性。这种动态获取或者调用的方式就是Java的反射机制。
能做什么
在Java中,通过反射机制在运行时能够做到如下:
确认对象的类
确认类的所有成员变量和方法
动态调用任意一个对象的方法
…
二、相关基础
在进行更加详细的了解之前,我们需要重新温习一下Go语言相关的一些特性,所谓温故知新,从这些特性中了解其反射机制是如何使用的。
三、反射的使用
所谓反射就是动态运行时的状态。我们一般用到的包是reflect包
使用reflect一般分成三步:
首先需要把它转化成reflect对象(reflect.Type或者reflect.Value,根据不同的情况调用不同的函数)
获取反射值能返回相应的类型和数值
如果是struct的话,可以使用Elem()
修改
示例代码
四、结构体
4.1可以通过反射,获取结构体对象的属性和方法4.2可以通过反射,调用结构体方法
示例代码:
结构体中包含匿名结构体
4.3.可以通过反射,修改结构体的数据
示例代码:
本套教程配套代码地址
https://github.com/suifengqjn/block001
领取专属 10元无门槛券
私享最新 技术干货