기본 개념

“같은” 타입의 데이터들로 이루어진 타입

var 변수명 [요소 개수] 타입 //요소 개수는 무조건 상수로 지정한다

var books [5]string //선언만 한다

var books [2]string = [2]string{"tom", "red hair"} //선언과 초기화 동시에 한다

var books [2]string = [2]string{1:"red hair"} 
//인덱스가 1인 요소에 값 지정 나머지는 string의 기본값인 ""로 지정한다

books := [...]string{"tom", "red hair"}
//요소 개수는 초기화되는 요소 개수이다.

주의사항

슬라이스 그 자체에 * 포인터 변수를 달 필요 없음.

슬라이스는 배열에 대한 포인터, 즉 그 자체로 주소값이기 때문. 따라서 인수로 슬라이스 전달 시 *[] 이런 형식으로 전달하는 것은 불필요하다.

배열과 달리 데이터의 개수 제한이 없음.

var book []string //초기화하지 않은 상태. 길이가 0이다

var books []string = []string{"tom", "red hair"} //선언과 초기화 동시에 한다 len2 cap2이다.

var books []string = []string{1:"red hair"} //최대 길이 2이지만 더 늘어날 수있다

var books = make([]string, 3) //선언과 초기화 진행. 길이 3인 슬라이스

슬라이스에서 쓸 수 있는 메서드들

var books []string = []string{"tom", "red hair"} //선언과 초기화 동시에 한다

append(books, "hello", "cat") 

주의사항: cap - len 의 값이 추가하려는 값의 개수보다 모자란 경우, 기존 슬라이스의 cap을 2배로 늘린 새로운 슬라이스를 만들고, 거기에 기존 슬라이스 값을 복사한다. 그러면 주소값이 완전 다른 슬라이스가 생성된다. (길이가 0인 슬라이스에다 값을 추가하는 것을 생각하면된다)

cap - len 의 값이 추가하려는 값의 개수 이상인 경우, 기존 슬라이스에 값을 그대로 추가하게 된다. 따라서 주소값이 같은 슬라이스가 생성된다.