슬라이스는 배열의 한 부분이다. 배열과 마찬가지로 슬라이스는 인덱스가 가능하며 길이를 가진다. 하지만 배열과는 달리, 그 길이라는 것이 가변적이다. 다음의 예제를 보자.
1 | var x []float64 | cs |
배열과의 유일한 차이점은 괄호 안의 길이를 나타내는 부분이 비워져 있다는 것이다. 위의 경우에는 x 가 길이 0 으로 생성이 되었다.
내장 make 함수를 이용하여 슬라이스를 생성할 수 있다. 아래는 길이 5의 float64 배열과 관련된 슬라이스를 생성한다.
1 | x := make([]float64, 5) | cs |
슬라이스는 배열과 연관이 있으며, 절대 배열의 크기보다 클 수는 없다. make 함수는 3번째 인수도 갖는데, 아래의 예에서 10은 슬라이스가 가리키는 내포된 배열의 용량을 의미한다.
1 | x := make([]float64, 5, 10) | cs |
|
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
슬라이스를 만드는 또 다른 방법은 [low : high] 식을 사용하는 것이다.
1 2 | arr := [5]float64{1,2,3,4,5} x := arr[0:5] | cs |
low는 슬라이스의 시작점을 나타내는 인덱스이고, high는 그 끝을 나타내는 인덱스이다 (하지만 인덱스 자체는 포함하지 않는다). 예를 들어 arr[0:5] 은 [1,2,3,4,5] 를 반환하는 반면, arr[1:4] 는 [2,3,4] 를 반환한다.
편의상 low 나 high 또는 둘 모두를 생략할 수 있다. arr[0:] 는 arr[0:len(arr)] 와 같으며, arr[:5] 는 arr[0:5] 와, 그리고 arr[:] 는 arr[0:len(arr)] 와 동일하다.
Slice Functions
Go는 슬라이스를 지원하는 2개의 내장 함수 - append 와 copy - 를 가지고 있다. 아래는 append 의 예제이다.
1 2 3 4 5 6 7 8 9 | package main import "fmt" func main() { slice1 := []int{1,2,3} slice2 := append(slice1, 4, 5) fmt.Println(slice1, slice2) } | cs |
실행해보면 아래와 같이 slice1 은 [1,2,3] 를 그리고 slice2 는 [1,2,3,4,5] 를 출력함을 알 수 있다.
1 2 3 | ~/go/src/golang-book/chapter6# go run main.go [1 2 3] [1 2 3 4 5] | cs |
append 는 새로운 슬라이스를 생성하는데, 기존 슬라이스를 첫 번째 인수로, 그리고 이에 덧붙일 것을 2번째 인수로 가져와 결합시킨다.
아래는 copy 의 예이다.
1 2 3 4 5 6 7 8 9 10 | package main import "fmt" func main() { slice1 := []int{1,2,3} slice2 := make([]int, 2) copy(slice2, slice1) fmt.Println(slice1, slice2) } | cs |
실행해보면 아래와 같이 slice1 은 [1,2,3] 를 그리고 slice2 는 [1,2] 를 가짐을 알 수 있다. 슬라이스1의 내용은 슬라이스2로 복사되지만, 슬라이스2가 오직 2개의 원소만을 가질 수 있기 때문에, 복사된 슬라이스1의 내용 중 앞선 2개의 원소만 출력되는 것이다.
1 2 3 | ~/go/src/golang-book/chapter6# go run main.go [1 2 3] [1 2] | cs |
'프로그래밍 Programming' 카테고리의 다른 글
Go 언어 입문 - Control Structures - Functions (1) (golang-book) (0) | 2018.09.09 |
---|---|
Go 언어 입문 - Control Structures - Maps (golang-book) (0) | 2018.09.05 |
Go 언어 입문 - Control Structures - Array (golang-book) (0) | 2018.09.01 |
Go 언어 입문 - Control Structures - Switch (golang-book) (0) | 2018.08.31 |
Go 언어 입문 - Control Structures - If (golang-book) (0) | 2018.08.31 |