타입

Type

Go의 타입 작성법은 다음과 같다.

Type     = TypeName | TypeLit | "(" Type ")" .
TypeName = identifier | QualifiedIdent .
TypeLit  = ArrayType | StructType | PointerType | FunctionType |
           InterfaceType | SliceType | MapType | ChannelType .

나머지는 차차 보도록 하고, 여기서는 predefined identifier 중 types에 해당하는 기본 타입들에 대해서만 먼저 알아보도록 하자.

Boolean

참 또는 거짓을 나타내는 타입이다.

bool		true 또는 false

Numeric

숫자형들은 주로 형식 + 크기(비트 수)의 형태로 구성되며, 몇 가지 별칭이 예외로 추가된다.

uint8		부호 없는 8비트 정수 (0 ~ 255)
uint16		부호 없는 16비트 정수 (0 ~ 65535)
uint32		부호 없는 32비트 정수 (0 ~ 4294967295)
uint64		부호 없는 64비트 정수 (0 ~ 18446744073709551615)

int8		부호 있는 8비트 정수 (-128 ~ 127)
int16		부호 있는 16비트 정수 (-32768 ~ 32767)
int32		부호 있는 32비트 정수 (-2147483648 ~ 2147483647)
int64		부호 있는 64비트 정수 (-9223372036854775808 ~ 9223372036854775807)

float32		IEEE-754 32비트 floating point 실수
float64		IEEE-754 64비트 floating point 실수	

complex64	실수부, 허수부가 각각 32비트 floating point인 복소수
complex128	실수부, 허수부가 각각 64비트 floating point인 복소수

byte		uin8의 별칭
rune		int32의 별칭

위 타입들은 모두 실행 환경에 관계없이 동일한 크기를 갖고, 아래 세 가지는 크기가 변경된다. C의 long 타입과 유사하다고 볼 수 있다.

uint		32비트 또는 64비트
int			32비트 또는 64비트
uintptr		포인터를 저장하기에 적당한 크기

String

문자열을 저장하기 위한 타입으로 변경 불가능(immutable)하기 때문에 메모리 관리 측면에서 주의가 필요하다.

string		"문자열"

Java에서 문자열을 합치기 위해 +를 남발했다가 고생한 기억이 있다면 이 글을 유심히 보기 바란다.


변수에서 확인한 것처럼 Go의 변수는 일반적으로 var i int 형태로 선언한다. 타입 작성법의 Type에 대한 마지막 표현 Type = "(" Type ")"이 좀 특이한데, 결론적으로 Type을 1개 이상의 괄호로 묶어도 괜찮다는 의미이다. 즉,

var i (((int)))

이런 형태도 가능하다.

Zero value

Go는 변수 선언 후 값을 입력하지 않으면 자동으로 zero value로 초기화한다. 각 타입의 zero value는 다음과 같다.

  • boolean: false
  • numeric: 0
  • string: "" (empty string)
  • pointer, function, interface, slice, map, channel: nil