如何在 Golang 中使用反射?
go programmingserver side programmingprogramming
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