The Go Programming Language Specification
Types
A type determines the set of values and operations specific to values
of that type. A type may be specified by a (possibly qualified) type
name or a type literal, which composes a new type from previously
declared types.
Type = TypeName | TypeLit | "(" Type ")" .
TypeName = identifier | QualifiedIdent .
TypeLit = ArrayType | StructType | PointerType | FunctionType |
InterfaceType | SliceType | MapType | ChannelType .
Named instances of the boolean, numeric, and string types are
predeclared. Composite types—array, struct, pointer, function,
interface, slice, map, and channel types—may be constructed using type
literals.
Each type T
has an underlying type: If T
is a predeclared type or a
type literal, the corresponding underlying type is T
itself.
Otherwise, T
's underlying type is the underlying type of the type to
which T
refers in its type declaration.
type T1 string
type T2 T1
type T3 []T1
type T4 T3
The underlying type of string
, T1
, and T2
is string
. The underlying
type of []T1
, T3
, and T4
is []T1
.
Conversions
Conversions are expressions of the form T(x)
where T
is a type and
x
is an expression that can be converted to type T
.
A non-constant value x
can be converted to type T
in the case:
x
's type and T
have identical underlying types.