Go의 slice는 배열의 기초하여 만들어졌지만, 배열과는 다르게 동적으로 크기가 증가할 수 있고, 배열의 일부분을 참조할 수 있다.
make() 함수를 사용하여 길이(Length)와 용량(Capacity)을 임의로 지정// slice 생성
slice1 := []int{1, 2, 3}
slice2 := make([]int, 3, 5) // 길이 3, 용량 5인 slice 생성
append() 함수를 사용하여 요소를 추가함func main() {
s := []int{0, 1}
// 하나 확장
s = append(s, 2) // 0, 1, 2
// 복수 요소들 확장
s = append(s, 3, 4, 5) // 0,1,2,3,4,5
fmt.Println(s)
}
slice := make([]int, 0, 10) // 길이 0, 용량 10인 slice 생성
fmt.Printf("%p\n", &slice[0]) // 초기 주소값 출력
slice = append(slice, 1, 2, 3) // 값 추가
fmt.Printf("%p\n", &slice[0]) // 주소값 동일
slice[3] = 4 // 인덱싱으로 직접 값 대입
slice[4] = 5
fmt.Println(slice) // [1 2 3 4 5]
fmt.Printf("%p\n", &slice[0]) // 주소값 동일
package main
import "fmt"
func main() {
// 슬라이스 생성
slice1 := []int{1, 2, 3, 4, 5}
// 슬라이스 복사
slice2 := slice1
// 원본 슬라이스 값 변경
slice1[1] = 200
fmt.Println("slice1: ", slice1) // slice1: [1 200 3 4 5]
fmt.Println("slice2: ", slice2) // slice2: [1 200 3 4 5]
// 슬라이스 주소 확인
fmt.Printf("slice1 주소: %p\n", &slice1[0]) // slice1 주소: 0xc00008e180
fmt.Printf("slice2 주소: %p\n", &slice2[0]) // slice2 주소: 0xc00008e180
}
pointer, length, capacity 세 가지 인덱스 값을 가짐slice[포함부터 : 전까지]slice[low:high:max]
arr := [5]int{1, 2, 3, 4, 5} // 배열
// 전체 슬라이싱
slice1 := arr[:] // [1 2 3 4 5]
// 부분 슬라이싱
slice2 := arr[1:3] // [2 3]
slice3 := arr[2:] // [3 4 5]
slice4 := arr[:4] // [1 2 3 4]
// 최대 용량 지정
slice5 := arr[1:3:4] // [2 3], 최대 용량은 4