포인터

Pointer

Go의 포인터는 생김과 사용법이 C의 그것과 매우 유사하다.

먼저 포인터에 대한 규정을 살펴보면 다음과 같다.

PointerType = "*" BaseType .
BaseType    = Type .

C에서와 같이 타입 앞에 asterisk(*)를 붙이면 포인터 타입이 된다.

포인터 = 주소 이므로 포인터 변수에 값을 할당할 때는 기본 타입 앞에 ampersand(&)를 붙인다.

var i int
var hello string

var p *int = &i
hello_p := &hello

C/C++에서와 같이 기본 타입을 선언하지 않은 상태에서 포인터에 주소를 할당할 수 있으며—동적 할당; dynamic allocation— 이를 위해 기본 제공(built-in) 함수인 new 를 사용한다. 이상하겠지만 Go의 new 는 연산자(operator)가 아닌 함수(function)이다.

var p *int
p = new(int)