golang反射reflect

本文详细介绍了Golang中反射(reflect)的使用方法,包括如何获取和设置结构体属性值,以及如何读取tag标记。通过示例展示了反射在设置结构体属性值时的要求,并解释了反射在数据解析与序列化中的重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Golang的反射reflect讲解与示例
作用:获取结构体属性的值,设置结构体属性的值,获取tag标记

reflect 解决的是运行时获取的对象方法、属性。reflec也可以很好的完成数据的解析与序列化。如远程数据库操作、RPC 数据、json、http 数据、本地 yaml 文件读取等相关的这些优质开源库便是通过反射实现。

设置时,结构体属性首字母必须大写。
gorm,json,yaml,gRPC,protobuf,gin.Bind()等,在golang里都是通过反射实现

type People struct {
	Age  int `json:"age"`
	Name string
}
func main(){
//设置结构体属性的值
	p := new(People)
	content := "Name"
	v := reflect.ValueOf(p).Elem()
	//属性是否可以被设置
	fmt.Println(v.FieldByName(content).CanSet())
	v.FieldByName(content).SetString("紫颜")
	v.FieldByName("Age").SetInt(26)
	fmt.Println(p)

	//获取tag标记
	t := reflect.TypeOf(People{})
	fmt.Println(t.FieldByName("Age"))
	name, b := t.FieldByName("Age")
	if b {
		fmt.Println(name.Tag)
		get := name.Tag.Get("json")
		fmt.Println(get)
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值