// ReceiverNamed returns the named type (if any) associated with the // type of recv, which may be of the form N or *N, or aliases thereof. // It also reports whether a Pointer was present. func ReceiverNamed(recv *types.Var) (isPtr bool, named *types.Named) { … } // Unpointer returns T given *T or an alias thereof. // For all other types it is the identity function. // It does not look at underlying types. // The result may be an alias. // // Use this function to strip off the optional pointer on a receiver // in a field or method selection, without losing the named type // (which is needed to compute the method set). // // See also [typeparams.MustDeref], which removes one level of // indirection from the type, regardless of named types (analogous to // a LOAD instruction). func Unpointer(t types.Type) types.Type { … }