go语言快速入门:go的反射机制(22)

Java的反射机制是其标志性的特征之一,正是这种语言本身支持的强大的机制使得很多流行的框架有了用武之地。C++中虽然也能实现,但是语言本身并没有提供标准的支持。
而作为一门现代的语言,go语言也引入了反射机制,在这篇文章中我们将会了解一下go语言中的反射机制是如何使用的。

反射机制

反射机制是程序能够检查其自身结构,属于元编程的范畴,强大的同时也往往是困扰的源头。虽然各种语言的反射模型有所不同,但是通过简单的比较也能有所收获。在了解Go的反射机制之前先来看看Java的反射机制吧。

Java的反射机制

我们所熟知的Java的反射机制是什么?对于类和对象的使用,普通的方式是知道类和对象的属性和方法之后进行调用或者访问。
而反射机制,简单来说,是在运行状态中,Java对于任何的类,都能够确认到这个类的所有方法和属性;对于任何一个对象,都能调用它的任意方法和属性。这种动态获取或者调用的方式就是Java的反射机制。

能做什么

在Java中,通过反射机制在运行时能够做到如下:

  • 确认对象的类
  • 确认类的所有成员变量和方法
  • 动态调用任意一个对象的方法

相关基础

在进行更加详细的了解之前,我们需要重新温习一下Go语言相关的一些特性,所谓温故知新,从这些特性中了解其反射机制是如何使用的。

特点 说明
go语言是静态类型语言。 编译时类型已经确定,比如对已基本数据类型的再定义后的类型,反射时候需要确认返回的是何种类型。
空接口interface{} go的反射机制是要通过接口来进行的,而类似于Java的Object的空接口可以和任何类型进行交互,因此对基本数据类型等的反射也直接利用了这一特点

反射标准库

反射是使用库reflect来实现,使用的时候需要将reflect库import进来

项目 详细
反射标准库 reflect
文档 https://golang.org/pkg/reflect/
反射类型 reflect.Type 和 reflect.Value
常用函数 reflect.TypeOf 和 reflect.ValueOf

reflect.TypeOf 和 reflect.ValueOf的定义如下:

[root@liumiaocn goprj]# go doc reflect.TypeOf
func TypeOf(i interface{}) Type
    TypeOf returns the reflection Type that represents the dynamic type of i. If
    i is a nil interface value, TypeOf returns nil.

[root@liumiaocn goprj]# go doc reflect.ValueOf
func ValueOf(i interface{}) Value
    ValueOf returns a new Value initialized to the concrete value stored in the
    interface i. ValueOf(nil) returns the zero Value.

[root@liumiaocn goprj]#

反射定律

go语言

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值