如何在 Golang 中使用反射?
反射在 Golang 中是指在运行时了解我们正在处理的数据的数据类型。通常在某些情况下,我们希望知道在运行时获取的某个变量的数据类型或类似的东西。
借助反射,我们可以提取 Golang 中任何数据类型的类型、值和种类。
在本文中,我们将探讨反射中使用的不同第三方函数。
示例 1 – reflect.TypeOf()
它用于返回类型reflect的值。简单来说,它用于了解数据类型是什么。
考虑下面显示的代码,我们将使用此函数。
package main
import (
"fmt"
"reflect"
)
func main() {
var name string = "TutorialsPoint"
fmt.Println(reflect.TypeOf(name))
sl := []int{1, 2, 3, 4, 5}
fmt.Println(reflect.TypeOf(sl))
num := 989
fmt.Println(reflect.TypeOf(num))
}输出
如果我们在上述命令上运行命令go run main.go,我们将在终端中获得以下输出。
string []int int
示例 2 – reflect.ValueOf()
当我们想要查找变量的值时使用它。考虑下面显示的代码,我们将使用此函数。
package main
import (
"fmt"
"reflect"
)
func main() {
var name string = "TutorialsPoint"
fmt.Println(reflect.ValueOf(name))
sl := []int{1, 2, 3, 4, 5}
fmt.Println(reflect.ValueOf(sl))
num := 989
fmt.Println(reflect.ValueOf(num))
}输出
如果我们在上述命令上运行命令 go run main.go,我们将在终端中获得以下输出。
TutorialsPoint [1 2 3 4 5] 989
示例 3
我们还可以找到结构体内部的字段数量。考虑下面显示的代码。
package main
import (
"fmt"
"reflect"
)
type Person struct {
age int
name string
number float64
isMarries bool
}
func main() {
p := Person{10, "ABCD", 15.20, true}
typeT := reflect.TypeOf(p)
fmt.Println(typeT.NumField())
}输出
如果我们在上述命令上运行命令go run main.go,我们将在终端中获得以下输出。
4
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP