type nameOff … type typeOff … type textOff … type _type … type rtype … func (t rtype) string() string { … } func (t rtype) uncommon() *uncommontype { … } func (t rtype) name() string { … } // pkgpath returns the path of the package where t was defined, if // available. This is not the same as the reflect package's PkgPath // method, in that it returns the package path for struct and interface // types, not just named types. func (t rtype) pkgpath() string { … } var reflectOffs … func reflectOffsLock() { … } func reflectOffsUnlock() { … } func resolveNameOff(ptrInModule unsafe.Pointer, off nameOff) name { … } func (t rtype) nameOff(off nameOff) name { … } func resolveTypeOff(ptrInModule unsafe.Pointer, off typeOff) *_type { … } func (t rtype) typeOff(off typeOff) *_type { … } func (t rtype) textOff(off textOff) unsafe.Pointer { … } type uncommontype … type interfacetype … type arraytype … type chantype … type slicetype … type functype … type ptrtype … type name … type structtype … func pkgPath(n name) string { … } // typelinksinit scans the types from extra modules and builds the // moduledata typemap used to de-duplicate type pointers. func typelinksinit() { … } type _typePair … func toRType(t *abi.Type) rtype { … } // typesEqual reports whether two types are equal. // // Everywhere in the runtime and reflect packages, it is assumed that // there is exactly one *_type per Go type, so that pointer equality // can be used to test if types are equal. There is one place that // breaks this assumption: buildmode=shared. In this case a type can // appear as two different pieces of memory. This is hidden from the // runtime and reflect package by the per-module typemap built in // typelinksinit. It uses typesEqual to map types from later modules // back into earlier ones. // // Only typelinksinit needs this function. func typesEqual(t, v *_type, seen map[_typePair]struct{ … }