포인터란?
- 값이 저장된 메모리의 위치 값(주소)를 저장하는 변수
주소 연산자(&)
간접 연산자(*, dereferencing operator)
모든 포인터는 어떤 타입을 가리키던간에 항상 같은 크기
포인터의 제로 값: nil
- 슬라이스, 맵, 함수의 제로 값: nil
포인터 dereferencing 전에 nil인지 확인할 필요 있다.
포인터 타입
- 포인터가 가리키는 값의 타입
- 포인터가 어떤 타입의 값을 가리키는지 나타냄
- 포인터 변수를 선언할 때 주로 사용
- 타입 이름 앞에
- cf.) 포인터 역참조: 변수 이름 앞에
x := 10
var pointerToX *int
pointerToX = &x
내장 함수 new()
- 포인터 변수 생성
- 해당 타입의 제로 값을 가리키는 포인터 반환
기본 타입의 리터럴이나 상수는 주소가 없으므로 주소연산자를 사용할 수 없다.
0, ‘ ‘ vs. NULL, ‘’ ⇒ Go: nil
값이 있음 vs. 값이 없음
포인터를 이용하여 변수나 구조체의 항목의 값이 제로 값인지 없는 값인지 구분하는데 사용
할당되지 않은 변수나 구조체 항목에 nil 포인터를 사용
또한, 포인터는 변경가능함을 나타내므로 함수에서 nil 포인터를 직접 반환하는 것보다 콤마 OK 관용구를 사용하자
nil 포인터를 함수의 파라미터나 구조체의 항목의 값으로 담아서 함수의 인자로 넘기면 nil 포인터를 통해서는 값을 저장할 수 없으므로 함수 안에서 값을 설정할 수가 없음을 명심