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的反射机制就介绍这么多,欢迎感兴趣的小伙伴留言交流。
文章来源: liuzhen.blog.csdn.net,作者:Data-Mining,版权归原作者所有,如需转载,请联系作者。
原文链接:liuzhen.blog.csdn.net/article/details/115439750
- 点赞
- 收藏
- 关注作者
评论(0)