인덱스 식

다음과 같은 형태의 기본 식은

a[x]

x로 인덱스된 배열, 배열 포인터, 슬라이스, 문자열, 혹은 맵인 a의 요소를 의미한다. x의 값은 해당 데이터 구조의 인덱스 혹은 맵의 키라고 부른다. 다음과 같은 규칙을 따른다:

a가 맵이 아닌 경우:

  • 인덱스 x는 정수 타입이거나 미지정 타입이어야 한다; 0 <= x < len(a)이 성립하면 범위 안이라고 하고, 그렇지 않으면 범위 밖이라고 한다.
  • 상수 인덱스는 음수일 수 없고 타입 int의 값으로 나타낸다.

배열 타입 Aa에 대해서는:

  • 상수 인덱스는 범위 안에 있어야 한다.
  • 만약 런타임에 x가 범위 밖이면, 런타임 패닉이 발생한다.
  • a[x]x 인덱스의 배열 요소이고 a[x]의 타입은 A의 요소 타입이다.

배열 타입의 포인터a에 대해서는:

  • a[x](*a)[x]를 속기한 것이다.

슬라이스 타입 Sa에 대해서는:

  • 런타임에서 x가 범위 밖일 경우 런타임 패닉이 발생한다.
  • a[x]는 인덱스 x에 위치한 슬라이스 요소이고 a[x]의 타입은 S의 요소 타입이다.

string 타입a에 대해서는:

  • 만약 문자열 a가 상수일 경우 상수 인덱스는 범위 안에 있어야 한다.
  • 런타임에서 x가 범위 밖일 경우 런타임 패닉이 발생한다.
  • a[x]는 인덱스 x에 위치한 비상수 바이트값이고 a[x]의 타입은 byte이다.
  • a[x]는 새로운 값을 할당할 수 없다.

map 타입 Ma에 대해서는:

  • x'의 타입은 M의 키 타입에 할당 가능해야 한다.
  • map이 키 x로 입력된 값을 가지고 있으면, a[x]는 키 x에 대한 map 값이고 a[x]의 타입은 M의 값 타입이다.
  • map이 nil이거나 해당하는 입력이 없을 때, a[x]M의 값 타입에 맞는 제로값이다.

그 외 경우에 a[x]는 허용되지 않는다.

타입 map[K]V의 map a에 대한 인덱스 식이 할당문에 사용되거나 특별한 형식의 초기화에 사용될 경우

v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]

추가적으로 미지정 타입의 불리언 값이 생성된다. 키 x가 map안에 있으면 ok의 값은 true이고 그렇지 않으면 false이다.

nil map의 요소에 할당하면 런타임 패닉이 발생한다.

results matching ""

    No results matching ""