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

被折叠的 条评论
为什么被折叠?



