var BuiltinPkg … var LocalPkg … var UnsafePkg … var BlankSym … var NumImport … type fmtMode … const fmtGo … const fmtDebug … const fmtTypeID … const fmtTypeIDName … // Format implements formatting for a Sym. // The valid formats are: // // %v Go syntax: Name for symbols in the local package, PkgName.Name for imported symbols. // %+v Debug syntax: always include PkgName. prefix even for local names. // %S Short syntax: Name only, no matter what. func (s *Sym) Format(f fmt.State, verb rune) { … } func (s *Sym) String() string { … } // See #16897 for details about performance implications // before changing the implementation of sconv. func sconv(s *Sym, verb rune, mode fmtMode) string { … } func sconv2(b *bytes.Buffer, s *Sym, verb rune, mode fmtMode) { … } func symfmt(b *bytes.Buffer, s *Sym, verb rune, mode fmtMode) { … } // pkgqual returns the qualifier that should be used for printing // symbols from the given package in the given mode. // If it returns the empty string, no qualification is needed. func pkgqual(pkg *Pkg, verb rune, mode fmtMode) string { … } var BasicTypeNames … var fmtBufferPool … // Format implements formatting for a Type. // The valid formats are: // // %v Go syntax // %+v Debug syntax: Go syntax with a KIND- prefix for all but builtins. // %L Go syntax for underlying type if t is named // %S short Go syntax: drop leading "func" in function type // %-S special case for method receiver symbol func (t *Type) Format(s fmt.State, verb rune) { … } // String returns the Go syntax for the type t. func (t *Type) String() string { … } // LinkString returns a string description of t, suitable for use in // link symbols. // // The description corresponds to type identity. That is, for any pair // of types t1 and t2, Identical(t1, t2) == (t1.LinkString() == // t2.LinkString()) is true. Thus it's safe to use as a map key to // implement a type-identity-keyed map. func (t *Type) LinkString() string { … } // NameString generates a user-readable, mostly unique string // description of t. NameString always returns the same description // for identical types, even across compilation units. // // NameString qualifies identifiers by package name, so it has // collisions when different packages share the same names and // identifiers. It also does not distinguish function-scope defined // types from package-scoped defined types or from each other. func (t *Type) NameString() string { … } func tconv(t *Type, verb rune, mode fmtMode) string { … } // tconv2 writes a string representation of t to b. // flag and mode control exactly what is printed. // Any types x that are already in the visited map get printed as @%d where %d=visited[x]. // See #16897 before changing the implementation of tconv. func tconv2(b *bytes.Buffer, t *Type, verb rune, mode fmtMode, visited map[*Type]int) { … } func formatParams(b *bytes.Buffer, params []*Field, mode fmtMode, visited map[*Type]int) { … } func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Type]int, isParam bool) { … } // SplitVargenSuffix returns name split into a base string and a ·N // suffix, if any. func SplitVargenSuffix(name string) (base, suffix string) { … } // TypeHash computes a hash value for type t to use in type switch statements. func TypeHash(t *Type) uint32 { … }