Go语言反射语法

Go语言反射语法教程

Go 语言 提供了一种机制在运行时更新 变量 和检查它们的值、调用它们的 方法 和它们支持的内在操作,但是在编译时并不知道这些变量的具体 类型。这种机制被称为 反射。反射也可以让我们将类型本身作为第一类的值类型处理。

反射是把双刃剑,功能强大但代码可读性并不理想。若非必要,并不推荐使用反射。

Go语言反射概念

Go 语言中的反射与其他语言有比较大的不同,Golang 中的发射主要涉及到两个基本概念 TypeValue,它们也是 Go 语言包中 reflect 里最重要的两个类型。

在 Golang 中对所有 接口 进行反射,都可以得到一个包含 Type 和 Value 的信息结构。顾名思义,Type 主要表达的是被反射的这个变量本身的类型信息,而 Value 则为该变量实例本身的信息。

Golang反射作用

Golang 中的反射主要有两个作用,即,获取类型信息和获取值类型。

反射获取数据类型

语法

reflect.TypeOf(x)

参数

参数 描述
x 要获取类型的变量。

说明

我们可以通过 reflect.TypeOf(x) 函数,获取变量的数据类型。

案例

反射获取基本类型信息

可以使用反射获取基本数据类型信息

package main import ( "fmt" "reflect" ) func main() { fmt.Println("嗨客网(www.haicoder.net)") var x = 3.4 var str = "HaiCoder" fmt.Println("x type =", reflect.TypeOf(x)) fmt.Println("str type =", reflect.TypeOf(str)) }

程序运行后,控制台输出如下:

01_golang反射.png

首先,我们定义了一个 float 类型 的变量 x 和一个 字符串 类型的变量 str,接着,我们使用 reflect.TypeOf 获取这两个变量的类型,并打印。

即,我们使用 reflect.TypeOf 反射出了两个基本数据类型的变量的类型。

反射获取结构体类型信息

可以使用反射获取结构体类型信息

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { fmt.Println("嗨客网(www.haicoder.net)") person := &Person{ Name:"HaiCoder", Age:18, } fmt.Println("person type =", reflect.TypeOf(person)) }

程序运行后,控制台输出如下:

02_golang反射.png

首先,我们定义了一个 结构体 Person,该结构体包含两个字段,即 Name 和 Age。接着,在 main 函数,我们定义了一个结构体类型的变量 person。

最后,我们使用反射获取结构体变量 person 的数据类型,并打印。

Go语言反射语法教程总结

Go 语言中的反射与其他语言有比较大的不同,Golang 中的发射主要涉及到两个基本概念 Type 和 Value,它们也是 Go 语言包中 reflect 包里最重要的两个类型。Golang 反射获取数据类型语法:

reflect.TypeOf(x)