目录 前言正文何为反射?关键用途结尾前言Golang中也存在反射机制,具体怎么使用呢?先睹为快。正文何为反射?反射就是Golang通过来获取对象的类型信息或者结构信息,再进行访问或者修改的能力。Golang语...
目录
前言
正文
何为反射?
关键用途
结尾
前言
Golang中也存在反射机制,具体怎么使用呢?先睹为快。
正文
何为反射?
反射就是Golang通过来获取对象的类型信息或者结构信息,再进行访问或者修改的能力。
Golang语言是利用 reflect 关键字进行反射调用的。
一般情况下,Golang声明的变量都包括两部分基本内容,一部分是变量类型,比如int、string、bool;另一部分是变量的值,比如0,“123”,true。
在Golang语言中可以通过 reflect.TypeOf() 函数获取任意变量的类型,通过reflect.ValueOf() 函数获取任意变量的值。
下面通过一段代码来理解一下这两个函数的作用。
实例代码:
package main
import (
"fmt"
"reflect" // 导入反射包
)
func main() {
str := "Hello, world"
//通过反射获取变量a的type类型
fmt.Println(reflect.TypeOf(str))
//通过反射获取变量a的value类型
fmt.Println(reflect.ValueOf(str))
}
代码运行结果:
string
Hello, world
关键用途
Golang中的反射机制一个重要用途就是修改变量的值。
具体操作是怎么样的呢?
记下来,我们也通过一段代码来简单了解一下。
代码实例:
package main
import (
"fmt"
"reflect"
)
func main() {
// 声明变量a
num := 666
fmt.Printf("a的内存地址为:%p\n", &num)
// 获取变量a的反射类型reflect.Value 的地址
ref := reflect.ValueOf(&num)
fmt.Println("通过反射获取变量a的地址:", ref)
// 获取变量a的地址的值
rval := ref.Elem()
fmt.Println("反射a的值:", rval)
//修改变量a的值
rval.SetInt(888)
fmt.Println("修改之后反射类型的值为:", rval.Int())
//原始值也会被修改
fmt.Println("原始a的值也被修改为:", num)
}
代码运行结果:
a的内存地址为:0xc00007e020
通过反射获取变量a的地址: 0xc00007e020
反射a的值: 666
修改之后反射类型的值为: 888
原始a的值也被修改为: 888
通过上面的小例子,是不是对于Golang利用反射机制修改变量的操作就能够理解了。
结尾
好了,关于Golang的反射机制就介绍这么多,欢迎感兴趣的小伙伴留言交流。
本文标题为:Golang中的反射机制


- R语言关于二项分布知识点总结 2022-11-30
- 汇编语言程序设计之根据输入改变屏幕颜色的代码 2023-07-06
- Go Web开发进阶实战(gin框架) 2023-09-06
- Ruby的字符串与数组求最大值的相关问题讨论 2023-07-22
- R语言绘图数据可视化pie chart饼图 2022-12-10
- Ruby on Rails在Ping ++ 平台实现支付 2023-07-22
- Ruby 迭代器知识汇总 2023-07-23
- Swift超详细讲解指针 2023-07-08
- Golang http.Client设置超时 2023-09-05
- R语言-如何切换科学计数法和更换小数点位数 2022-11-23