타입
타입은 어떠한 값들의 집합과 그 값들에 대한 연산과 메서드로 이루어져 있다. 타입은 (타입 이름이 있다면)타입 이름 또는 이미 존재하는 타입들로 구성된 타입 리터럴을 사용하여 나타낼 수 있다.
Type = TypeName | TypeLit | "(" Type ")" . TypeName = identifier | QualifiedIdent . TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType | SliceType | MapType | ChannelType .
불리언, 숫자, string 타입의 경우 여러 타입 이름들을 가지는데 이들은 미리 선언되어(predeclared) 있다. 그외에는 타입 선언(type declarations)을 통해 타입이름을 지정할 수 있다. 합성 타입(Composite types)-배열, struct, 포인터, 함수, interface, 슬라이스, map, 채널 타입-은 타입 리터럴을 이용해 만들 수 있다.
각각의 타입 T
는 내재 타입(underlying type)을 가지고 있다: 만약 T
가 사전에 선언(predeclared)된 불리언, 숫자, string 타입 중 하나거나 타입 리터럴이라면 내재 타입은 T
이다. 그 외의 경우, T
의 내재 타입은 타입 선언(type declarations)에서 T
가 참조하는 타입의 내재 타입이다.
type (
A1 = string
A2 = A1
)
type (
B1 string
B2 B1
B3 []B1
B4 B3
)
string
, A1
, A2
, B1
, B2
의 내재 타입은 string
이다. []B1
, B3
, B4
의 내재 타입은 []B1
이다.