슬라이스 식

슬라이스 식은 문자열, 배열, 배열을 가리키는 포인터나 슬라이스에서 부분 문자열 또는 슬라이스를 만들어 낸다. 슬라이스 식은 하한과 상한을 지정하는 간단한 형식과 용량에 대한 경계를 추가적으로 지정할 수 있는 완전한 형식으로 표현할 수 있다.

간단한 슬라이스 식

문자열, 배열, 배열을 가리키는 포인터 또는 슬라이스 a 에 대한 기본 식(primary expression)

a[low : high]

은 부분 문자열 또는 슬라이스를 만든다. 인덱스 lowhigh는 결과로 나타나는 피연산자 a의 요소들을 선택한다. 결과는 0에서 시작하는 인덱스와 high - low인 길이를 가진다. 배열 a 를 슬라이싱하면

a := [5]int{1, 2, 3, 4, 5}
s := a[1:4]

슬라이스 s[]int 타입이고, 길이는 3, 용량은 4이다. 요소들은 다음과 같다.

s[0] == 2
s[1] == 3
s[2] == 4

편의를 위해 인덱스를 생략할 수도 있다. low 인덱스를 생략하면 기본 값은 0이며; high 인덱스를 생략하면 슬라이스된 피연산자의 길이가 기본 값으로 설정된다.

a[2:]  // a[2 : len(a)]와 동일
a[:3]  // a[0 : 3]와 동일
a[:]   // a[0 : len(a)]와 동일

a가 배열을 가리키는 포인터라면, a[low : high](*a)[low : high]의 축약형이다.

문자열의 배열에 대하여, 0 <= low <= high <= len(a)라면 인덱스는 범위 내(in range)에 있고, 그렇지 않다면 범위를 벗어난(out of range) 것이다. 슬라이스에 대하여, 상위 인덱스 경계는 그 슬라이스의 길이가 아니라 용량인 cap(a)이다. 상수 인덱스는 음수가 아니고, int 타입의 값으로 표현이 가능해야 한다; 배열 혹은 상수 문자열에 대하여, 상수 인덱스들은 범위 내에 있어야만 한다. 두 인덱스들이 모두 상수라면, low <= high를 만족해야만 한다. 실행 시간에 인덱스들이 범위를 벗어나면, 런타임 패닉이 발생한다.

미지정 타입의 문자열를 제외하고, 슬라이스된 피연산자가 문자열 또는 슬라이스라면 슬라이스 연산의 결과는 피연산자와 같은 타입의 상수가 아닌 값이다. 미지정 타입의 문자열 피연산자의 경우에는 string 타입의 상수가 아닌 값이 결과가 된다. 슬라이스된 피연산자가 배열이라면, 할당 가능해야 하며, 슬라이스 연산의 결과는 그 배열과 같은 요소 타입을 가진 슬라이스다.

유효한 슬라이스 식의 슬라이스된 피연산자가 nil 슬라이스라면, 그 결과는 nil 슬라이스다. 그렇지 않다면, 그 결과는 피연산자의 내재 배열을 공유한다.

완전한 슬라이스 식

배열, 배열을 가리키는 포인터 또는 슬라이스 a (문자열은 아님)에 대한 기본 식은

a[low : high : max]

은 간단한 슬라이스 식 a[low : high] 와 같은 타입과 길이, 요소들을 갖는 슬라이스를 생성한다. 추가적으로, max - low를 설정하여 슬라이스의 용량을 제어한다. 첫 번째 인덱스만 생략할 수 있으며, 그 기본 값은 0이다. 배열 a를 슬라이싱하면

a := [5]int{1, 2, 3, 4, 5}
t := a[1:3:5]

슬라이스 t[]int 타입이며 길이는 2, 용량은 4이고, 요소들은 다음과 같다.

t[0] == 2
t[1] == 3

간단한 슬라이스 식에서처럼, a가 배열을 가리키는 포인터인 경우, a[low : high : max](*a)[low : high : max]의 축약형이다. 슬라이스된 피연산자가 배열인 경우, 할당 가능해야 한다.

0 <= low <= high <= max <= cap(a)라면 인덱스가 범위 내 에 있는 것이고, 그렇지 않다면 범위를 벗어난 것이다. 상수 인덱스는 음수가 아니여야 하며, int 타입의 값으로 표현할 수 있어야 한다; 배열에서 상수 인덱스는 반드시 범위 내에 있어야만 한다. 두 개 이상의 인덱스가 상수라면 해당 상수들은 인덱스 범위 안에 있어야 한다. 런타임 시점에 인덱스가 범위를 벗어나면, 런타임 패닉이 발생한다.

results matching ""

    No results matching ""