github.com/golang-infrastructure/go-reflect-utils@v0.0.0-20221130143747-965ef2eb09c3/struct.go (about) 1 package reflect_utils 2 3 // 4 //import ( 5 // "fmt" 6 // "reflect" 7 // "unsafe" 8 //) 9 // 10 //// GetStructPtrUnExportedField 获取struct上给定字段的值 11 //func GetStructPtrUnExportedField(source any, fieldName string) reflect.ItemValue { 12 // v := reflect.ValueOf(source).Elem().FieldByName(fieldName) 13 // if !v.IsValid() { 14 // return v 15 // } 16 // return reflect.NewAt(v.Type(), unsafe.Pointer(v.UnsafeAddr())).Elem() 17 //} 18 // 19 //// SetStructPtrUnExportedStrField 设置struct上给定字段的值 20 //func SetStructPtrUnExportedStrField(source interface{}, fieldName string, fieldVal interface{}) error { 21 // v := GetStructPtrUnExportedField(source, fieldName) 22 // rv := reflect.ValueOf(fieldVal) 23 // if v.Kind() != rv.Kind() { 24 // return fmt.Errorf("invalid kind: expected kind %v, got kind: %v", v.Kind(), rv.Kind()) 25 // } 26 // v.Set(rv) 27 // return nil 28 //} 29 // 30 //// Merge 合并Struct 31 //func Merge(sourceStruct, destStruct any) error { 32 // // TODO 2022-10-16 10:42:55 33 // 34 // return nil 35 //} 36 37 //// StructToMap 把struct转为map类型,如果struct的field也是struct的话,会递归转换 38 //func StructToMap(value any) map[string]any { 39 //} 40 41 //func MapToStruct() { 42 // 43 //} 44 // 45 //// StructFieldNames 获取一个struct的所有字段名 46 //func StructFieldNames() { 47 // 48 //} 49 // 50 //// StructValues 获取一个struct的所有字段值 51 //func StructValues() { 52 // 53 //} 54 // 55 //// IsStruct 判断是否是struct,如果是指针的话就递归访问拿到真实的值 56 //func IsStruct() bool { 57 // 58 //} 59 60 // ------------------------------------------------- ------------------------------------------------------------------------ 61 62 //func StructToBytes(structObject *any) []byte { 63 // s := unsafe.Pointer(structObject) 64 // sizeOfMyStruct := int(unsafe.Sizeof(structObject)) 65 // 66 // var x reflect.SliceHeader 67 // x.Len = sizeOfMyStruct 68 // x.Cap = sizeOfMyStruct 69 // x.Data = uintptr(s) 70 // return *(*[]byte)(unsafe.Pointer(&x)) 71 //} 72 // 73 //func BytesToStruct() { 74 // 75 //}