An explanation of the Go specification concept of 'core types', which is distinct from (but related to) underlying types. Core types exist primarily to support generics-related constructs. Non-interface types always have a core type equal to their underlying type. Interfaces have a core type only when all types in their type set share a single underlying type, or when the type set contains only channel types with identical element types and direction. A special 'bytestring' core type exists for interfaces whose type set contains exactly []byte and string, used by slice expressions, append, and copy operations.
6 Impressions