Go-反射
反射机制主要由reflect包提供支持 每个变量都有一个静态类型和一个动态类型,静态类型是在编译时确定的,而动态类型是在运行时确定的。
反射机制的原理是通过在运行时动态地获取类型信息和操作对象,实现对对象的检查、操作和修改
在Go语言中,反射是一种强大的机制,可以在运行时动态地获取和修改变量的值、类型和结构,也可以动态绑定函数方法等。
PS:
反射机制的主要应用场景是在框架、库和工具中,例如JSON解析、ORM框架、RPC框架等。反射机制可以让代码更加灵活和通用,但是也会带来一定的性能损失,因此在实际开发中需要权衡使用反射机制的利弊。
Go语言中的反射机制主要由reflect包提供支持,该包提供了Type和Value两个类型,分别表示类型信息和值信息。通过Type和Value类型,可以获取对象的类型信息、值信息、字段信息、方法信息等。
Demo
package main import ( "fmt" "reflect" ) type User struct { Name string `json:"name"` Age int `json:"age"` } func main() { user := User{Name: "Alice", Age: 18} t := reflect.TypeOf(user) fmt.Printf("%v\n", t) // main.User for i := 0; i < t.NumField(); i++ { field := t.Field(i) fmt.Printf("%s: %s\n", field.Name, field.Tag.Get("json")) } /* Name: name Age: age */ }
常用方法
reflect.TypeOf:获取变量的类型的反射对象。
reflect.ValueOf:获取变量的值的反射对象。
reflect.New:创建一个指向类型的新指针的反射对象。
reflect.Zero:获取类型的零值的反射对象。
reflect.Indirect:获取指针指向的值的反射对象。
reflect.PtrTo:获取类型的指针类型的反射对象。
reflect.TypeOf:获取类型的反射对象。
reflect.ValueOf:获取值的反射对象。
reflect.MakeFunc:创建一个新的函数值的反射对象。
reflect.MethodByName:获取类型的方法的反射对象。
reflect.Value.MethodByName:获取值的方法的反射对象。
reflect.Value.Method:获取值的方法的反射对象。
reflect.Value.Call:调用值的方法。
reflect.Value.FieldByName:获取值的字段的反射对象。
reflect.Value.Field:获取值的字段的反射对象。
reflect.Value.Set:设置值的反射对象的值。
reflect.Value.SetString:设置字符串类型值的反射对象的值。
reflect.Value.SetInt:设置整数类型值的反射对象的值。
reflect.Value.SetFloat:设置浮点数类型值的反射对象的值。
reflect.Value.SetPointer:设置指针类型值的反射对象的值。

浙公网安备 33010602011771号