더북(TheBook)

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]
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.