加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Go语言通过反射探访结构体成员的值

发布时间:2023-06-01 10:43:29 所属栏目:语言 来源:
导读:反射值对象(reflect.Value)提供对结构体访问的方法,通过这些方法可以完成对结构体任意值的访问。反射访问结构体成员值:package mainimport ("fmt""reflect")// 定义结构体type dummy struct {a intb string// 嵌

反射值对象(reflect.Value)提供对结构体访问的方法,通过这些方法可以完成对结构体任意值的访问。

反射访问结构体成员值:

package main

import (

"fmt"

"reflect"

)

// 定义结构体

type dummy struct {

a int

b string

// 嵌入字段

float32

bool

next *dummy

}

func main() {

// 值包装结构体

d := reflect.ValueOf(dummy{

next: &dummy{},

})

// 获取字段数量

fmt.Println("NumField", d.NumField())

// 获取索引为2的字段(float32字段)

floatField := d.Field(2)

// 输出字段类型

fmt.Println("Field", floatField.Type())

// 根据名字查找字段

fmt.Println("FieldByName(\"b\").Type", d.FieldByName("b").Type())

// 根据索引查找值中, next字段的int字段的值

fmt.Println("FieldByIndex([]int{4, 0}).Type()", d.FieldByIndex([]int{4, 0}).Type())

}

代码说明如下:

第 9 行,定义结构体,结构体的每个字段的类型都不一样。

第 24 行,实例化结构体并包装为 reflect.Value 类型,成员中包含一个 *dummy 的实例。

第 29 行,获取结构体的字段数量。

第 32 和 35 行,获取索引为2的字段值(float32 字段),并且打印类型。

第 38 行,根据b字符串,查找到 b 字段的类型。

第 41 行,[]int{4,0} 中的 4 表示,在 dummy 结构中索引值为 4 的成员,也就是 next。next 的类型为 dummy,也是一个结构体,因此使用 []int{4,0} 中的 0 继续在 next 值的基础上索引,结构为 dummy 中索引值为 0 的 a 字段,类型为 int。

代码输出如下:

NumField 5

Field float32

FieldByName("b").Type string

FieldByIndex([]int{4, 0}).Type() int

关注公众号「站长严长生」,在手机上阅读所有教程,随时随地都能学习。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!