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