github.com/golang-infrastructure/go-reflect-utils@v0.0.0-20221130143747-965ef2eb09c3/ptr.go (about) 1 package reflect_utils 2 3 import ( 4 "fmt" 5 "reflect" 6 ) 7 8 // GetUintPtrE 获取uintptr,不必担心panic的问题 9 func GetUintPtrE(value any) (uintptr, error) { 10 reflectValue := reflect.ValueOf(value) 11 switch reflectValue.Kind() { 12 case reflect.Chan, reflect.Func, reflect.Map, reflect.Pointer, reflect.Slice, reflect.UnsafePointer: 13 return reflectValue.Pointer(), nil 14 default: 15 return 0, fmt.Errorf("not support operation take pointer for type %#v", value) 16 } 17 } 18 19 // GetUintPtr 获取uintptr,不必担心panic的问题 20 func GetUintPtr(value any) uintptr { 21 ptr, _ := GetUintPtrE(value) 22 return ptr 23 } 24 25