热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

什么是Golang中的反射(通俗易懂)

什么是Golang中的反射(通俗易懂)-关于GO反射很多人对这块非常模糊,而官方的介绍又太专业,用简单的话描述一下关于反射(reflect)在Golang中文标准库中是这样介绍的r
关于 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 等。
关于反射的具体落实,主要用于框架的开发,而一般开发中相对较少,毕竟在框架中对于操作的数据很多情况下都是未知的。

以上就是个人对反射的理解,能力有限,如有错误请留言

若你理解了文章且有帮助,不妨点个赞?,是对作者的认可,谢谢?


推荐阅读
  • 七、Golang之切片(slice)-由于数组的长度是固定的,所以有很多的局限性,所以今天讲切片,切片是一个拥有相同类型且长度可变的有序集合,切片和数组两种不同的数据类型,它是基于 ... [详细]
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 本文主要分享【go协程模型】,技术文章【【GORM】模型关系-HasOne】为【VivaPython】投稿,如果你遇到GoWeb相关问题,本文相关知识或能到你。go协程模型一、概述HasO ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • Go 快速入门指南命令行参数
    命令行参数个数调用os包即可。获取参数个数,遍历参数packagemainimport(fmtos)funcmain(){fmt.Printf(Numberofargsi ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 20220811:以下go语言代码输出什么?A:panic;B:编译错误;C:json marshal 报错
    2022-08-11:以下go语言代码输出什么?A:panic;B:编译错误;C:jsonmarshal报错;D:null;E:nil。packagemainimport(enc ... [详细]
  • Go 快速入门指南正则表达式
    概述调用regexp包即可。例子是否匹配packagemainimport(fmtregexp)funcmain(){match,err:regexp.MatchStrin ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 看到平台银行对接方案写的demo确实还不错记个笔记互相学习学习packageapiimport(cryptotlsnetnethttpstringssynct ... [详细]
  • [Redis 系列]redis 学习六,redis 事务处理和监控事务
    【Redis系列】redis学习六,redis事务处理和监控事务写在前面我们学过的事务都是保证原子性的,但是redis的事务中执行多个指令,是不保证原子性的redis事务的本质就是 ... [详细]
  • 目标由于众所周知的原因,golang.org无法直接访问,golang文档和安装包无法下载,golang.orgxnet等官方包无法下载。常见解决方案是无脑挂代理,解决一切问题,但 ... [详细]
  • 怎么编译并运行golang程序
    怎么编译并运行golang程序?刚入门的朋友还不知道怎么编译运行golang程序,通过这篇文章的总结,希望你能学会书写你的第一个go语言程序。首先我们 ... [详细]
author-avatar
林小秋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有