3.4.4 슬라이스 변경
슬라이스 추가
슬라이스에 새로운 요소나 다른 슬라이스를 추가할 때는 append() 함수를 사용한다. append() 함수의 첫 번째 매개변수로 원본 슬라이스를 전달하고, 이어서 추가할 요소를 전달하면 원본 슬라이스에 추가된다. 슬라이스의 각 요소를 개별로 추가할 때는 ... 연산자를 사용한다.
ns1 := []int{1, 2, 3} ns2 := []int{6, 7, 8} ns3 := []int{8, 9, 10, 11} ns1 = append(ns1, 4, 5) // ns1: [1 2 3 4 5] ns1 = append(ns1, ns2...) // ns1: [1 2 3 4 5 6 7 8] ns1 = append(ns1, ns3[1:3]...) // ns1: [1 2 3 4 5 6 7 8 9 10] fmt.Println(ns1)
실행 결과
[1 2 3 4 5 6 7 8 9 10]
만약 슬라이스의 용량이 새로운 요소를 추가하기에 충분하지 않다면 append() 함수는 내부에 용량이 늘어난 새로운 슬라이스를 만들어 반환한다.
func main() { s := make([]int, 0, 3) for i := 0; i < 9; i++ { s = append(s, i) fmt.Printf("len: %d, cap: %d, %v\n", len(s), cap(s), s) } }
실행 결과
len: 1, cap: 3, [0] len: 2, cap: 3, [0 1] len: 3, cap: 3, [0 1 2] len: 4, cap: 8, [0 1 2 3] len: 5, cap: 8, [0 1 2 3 4] len: 6, cap: 8, [0 1 2 3 4 5] len: 7, cap: 8, [0 1 2 3 4 5 6] len: 8, cap: 8, [0 1 2 3 4 5 6 7] len: 9, cap: 16, [0 1 2 3 4 5 6 7 8]