github.com/nyan233/littlerpc@v0.4.6-0.20230316182519-0c8d5c48abaf/internal/reflect/pointer.go (about)

     1  package reflect
     2  
     3  import (
     4  	"reflect"
     5  	"unsafe"
     6  )
     7  
     8  // 关于一些指针的工具函数
     9  
    10  const PtrSize = unsafe.Sizeof(0)
    11  
    12  // PtrDeriveValue 根据ptrI提供的type,val提供的data派生一个eface
    13  // 不会修改ptrI中的数据,因为只使用了reflect.TypeOf()获取type的指针
    14  // 并没有使用ptrI中对应的efce的data的指针
    15  func PtrDeriveValue(ptrI interface{}, val interface{}) interface{} {
    16  	// NoNew不会重新分配eface-data的结构内存
    17  	return typeToEfaceNoNew(reflect.TypeOf(ptrI), val)
    18  }