对于 GO 反射很多人对这块十分含糊,而官网的介绍又太业余,用简略的话形容一下
对于反射(reflect)在 Golang 中文规范库中是这样介绍的
reflect 包实现了运行时反射,容许程序操作任意类型的对象。典型用法是用动态类型 interface{}保留一个值,通过调用 TypeOf 获取其动静类型信息,该函数返回一个 Type 类型值。调用 ValueOf 函数返回一个 Value 类型值,该值代表运行时的数据。Zero 承受一个 Type 类型参数并返回一个代表该类型零值的 Value 类型值。
抽取进去咱们看到以下几点:
1. 运行时,容许程序操作任意类型的对象
失常状况下,咱们操作一个构造体或者对象里的字段或办法时,咱们都须要率先晓得咱们要操作的构造体和对象是什么类型,只有晓得是什么类型后能力调用。尽管咱们能够对拿到的数据进行类型转换,然而在类型转换的过程中,不仍然还是指定了要转成的类型吗,因而反射就是在程序运行的过程中,能够对一个未知类型的数据进行操作的过程。一句话来说就是啥也不晓得,但就是要用
2. interface{}保留一个值
既然要用,那么如何应用呢?解释外面说的很分明,通过 interface{} 空接口存储要解决未知类型的数据,那为什么要用 interface{} 来接管呢,答案是因为 Golang 中的空接口没有定义任何办法,任何类型变量都实现空接口,因而用空接口能够示意任意数据类型
3. ValueOf,TypeOf 函数
通过调用下面俩个函数,就能够取得 Value 类型值和 Type 类型值,Value 代表这个未知类型外面的数据,能够通过函数对数据进行操作,Type 代表这个未知类型代表着数据类型,比方 int、string、指针、构造体 Student 等。
对于反射的具体落实,次要用于框架的开发,而个别开发中绝对较少,毕竟在框架中对于操作的数据很多状况下都是未知的。
以上就是集体对反射的了解,能力无限,如有谬误请留言
若你了解了文章且有帮忙,无妨点个赞👍,是对作者的认可,谢谢🌷