feat: 新增 reflects 包,包含反射相关辅助函数
This commit is contained in:
parent
822ffc7041
commit
340b00eb76
|
@ -0,0 +1,42 @@
|
|||
package reflects
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// DeepCopy 深拷贝
|
||||
func DeepCopy[T any](src T) T {
|
||||
vof := reflect.Indirect(reflect.ValueOf(src))
|
||||
tof := vof.Type()
|
||||
fmt.Println(tof)
|
||||
|
||||
return src
|
||||
}
|
||||
|
||||
// GetPtrUnExportFiled 获取指针类型的未导出字段
|
||||
func GetPtrUnExportFiled(s reflect.Value, filedIndex int) reflect.Value {
|
||||
v := s.Elem().Field(filedIndex)
|
||||
return reflect.NewAt(v.Type(), unsafe.Pointer(v.UnsafeAddr())).Elem()
|
||||
}
|
||||
|
||||
// SetPtrUnExportFiled 设置指针类型的未导出字段
|
||||
func SetPtrUnExportFiled(s reflect.Value, filedIndex int, val reflect.Value) {
|
||||
v := GetPtrUnExportFiled(s, filedIndex)
|
||||
v.Set(val)
|
||||
}
|
||||
|
||||
// Copy 拷贝
|
||||
func Copy(s reflect.Value) reflect.Value {
|
||||
return reflect.NewAt(s.Type(), unsafe.Pointer(s.UnsafeAddr())).Elem()
|
||||
}
|
||||
|
||||
// GetPointer 获取指针
|
||||
func GetPointer[T any](src T) reflect.Value {
|
||||
s := reflect.TypeOf(src)
|
||||
if s.Kind() == reflect.Pointer {
|
||||
return reflect.ValueOf(src)
|
||||
}
|
||||
return reflect.ValueOf(&src)
|
||||
}
|
Loading…
Reference in New Issue