首页 > 其他分享 >反射

反射

时间:2023-10-12 16:34:06浏览次数:26  
标签:反射 变量 value concrete 类型 type

1. 认识反射

1.1 常见的反射场景

1)编写一个函数,但是并不知道要传的参数类型是什么;也可能是传入的类型很多,这些类型并不能统一表示

2)根据某些条件决定调用哪个函数,比如根据用户的输入来决定。这时就需要对函数和函数的参数进行反射,在运行期间动态地执行函数

1.2 反射可能带来的问题

1)与反射相关的代码,经常是难以阅读的。在软件工程中,代码可读性也是一个非常重要的指标

2)Go 语言作为一门静态语言,编码过程中,编译器能提前发现一些类型错误,但是对于反射代码是无能为力的

3)反射对性能影响还是比较大的,比正常代码运行速度慢一到两个数量级。所以,对于一个项目中处于运行效率关键位置的代码,尽量避免使用反射特性

1.3 反射原理

1.3.1 Go语言的两个特点

1)Go语言是静态类型语言,因此在程序编译阶段,类型已经确定

2)interface{}空接口可以和任意类型进行交互,因此可以利用这一特点实现对任意类型的反射

1.3.2 Go语言的类型

1)变量包含(type,value)两个部分

2)type包括static type和concrete type,简单来说static type是在编码是看见的类型(如int、string),concrete type是runtime系统看见的类型

3)类型断言能否成功,取决于变量的concrete type,而不是static type。因此,一个reader变量如果它的concrete type也实现了write方法的话,它也可以被类型断言为writer

1.4 interface变量

每个interface变量都有一个pair,pair中记录了实际变量的值和类型:

(value, type)

其中:value是实际变量值,type是实际变量类型。一个interface变量包含了2个指针,一个指向值的类型(对应concrete type),一个指向实际的值(对应value)

总结:反射就是用来检测存储在接口变量内部(值value;类型concrete type) pair对的一种机制

2. Type和Value

reflect包提供了两个方法访问接口变量内容,分别是reflect.ValueOf() 和 reflect.TypeOf()

 

标签:反射,变量,value,concrete,类型,type
From: https://www.cnblogs.com/xiaojuzi1024/p/17759813.html

相关文章

  • Kotlin反射从父类获取子类成员属性
    背景有部分需求需要反射获取相关信息,例如,由于子类太多100+,需要在父类写toString方法涵盖子类的相关信息实现过程逻辑通过反射获取子类构造方法的参数通过当前实例调用参数的获取方法,获取参数值在父类的toString中输出和组建toString代码获取构造方法的参数valpc=t......
  • 组合 反射 抛出异常
    1.组合组合:把另外一个类的对象属性赋值给当前对象的属性首先要明白什么是什么的区别为什么要继承父类比如三个类老师类学生类课程类;虽然老师和学生有课程但是老师和学生是课程吗?还是老师和同学是课程"""isa的关系代表的是继承的关系和什么有什......
  • 组合,反射,魔术方法
    组合,反射,魔术方法组合反射魔术方法组合什么是组合? 组合就是,一个对象拥有一个属性,该属性的值是另外一个对象."""什么场景下使用继承?什么场景下使用组合?"""继承一般情况用在:什么是什么的情况is组合一般用在:什么有什么的情况hasclassFoo:def__init__(sel......
  • 组合,反射,魔术方法
    组合,反射,魔术方法组合反射魔术方法组合什么是组合? 组合就是,一个对象拥有一个属性,该属性的值是另外一个对象."""什么场景下使用继承?什么场景下使用组合?"""继承一般情况用在:什么是什么的情况is组合一般用在:什么有什么的情况hasclassFoo:def__init__(self......
  • Python 反射
    反射通过字符串映射或修改程序运行时的状态、属性、方法,有以下4个方法。hasattr(obj,name_str)#判断一个对象里是否有对应的name_str字符串的方法映射getattr(obj,name_str)#根据字符串去获取obj对象里的对应的方法的内存地址setattr(obj,"y",z),isequivalent(相当于)(to)......
  • 反射简介(Reflecyion)
    反射: 优点:可以实现动态创建对象和编译,灵活性好缺点:对性能有影响,反射基本是一个解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的需求,这些操作总是会慢于直接执行相同的操作。反射主要的API:Class ......
  • 记一次itflow 反射型XSS漏洞挖掘
    引言水一篇文章,单纯记录一下开源项目漏洞挖掘历程,本文介绍了一次对某开源项目的反射型XSS漏洞的挖掘,此开源项目是一个信息技术管理平台,XSS插入点为expenses.php接口中的dtf参数。漏洞挖掘GET请求接口点,dtf参数进行XSS防御,但没有完全过滤敏感字符和函数,造成了XSS漏洞,该参数......
  • Java的反射机制
    Java的反射机制前言能够分析类能力的程序称为反射,反射机制可以用来:在运行程序时分析类的能力;在运行时检查对象;实现泛型数组操作代码;利用Method对象;Class类在程序运行期间,Java运行时系统始终为所有对象维护一个「运行时类型信息标识」。这个信息会跟踪每个对象所属的类,J......
  • 详解PHP反射API
    反射API的部分类使用反射API这些类,可以获得在运行时访问对象、函数和脚本中的扩展的信息。通过这些信息可以用来分析类或者构建框架。类描    述Reflection为类的摘要信息提供静态函数export()ReflectionClass类信息和工具ReflectionMethod类方法信......
  • 什么是非法反射访问?
    一、反射的用途反射通常由需要检查或修改在Java虚拟机中运行的应用程序的运行时行为的能力的程序使用。这是一个相对高级的功能,只能由对语言基础知识有很强掌握的开发人员使用。考虑到这一点,反射是一种强大的技术,可以使应用程序执行原本不可能完成的操作。二、反射的缺点反射......