GO에서 슬라이스는 배열 위에 구축 된 유연하고 강력한 데이터 구조입니다. 길이와 용량의 두 가지 주요 속성이 있습니다.
len()
함수를 사용하여 슬라이스의 길이를 얻을 수 있습니다.cap()
함수를 사용하여 슬라이스의 용량을 얻을 수 있습니다. 다음은 len()
및 cap()
의 사용을 보여주는 간단한 예입니다.
<code class="go">package main import "fmt" func main() { s := make([]int, 5, 10) // Creates a slice with length 5 and capacity 10 fmt.Printf("Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
이 예에서 슬라이스 s
의 길이는 5이고 용량은 10입니다.
GO에 슬라이스의 용량은 생성되면 불변입니다. 기존 슬라이스의 용량을 직접 수정할 수 없습니다. 그러나 몇 가지 방법을 사용하여 다른 용량의 새 슬라이스를 만들 수 있습니다.
make
기능 사용 : 지정된 길이와 용량으로 새 슬라이스를 만들 수 있습니다.
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
append
Function 사용 : 요소를 슬라이스에 추가하면 GO는 필요한 경우 용량을 자동으로 증가시킵니다.
<code class="go">s := []int{1, 2, 3} s = append(s, 4, 5, 6) // This might increase the capacity if needed</code>
copy
기능 사용 : 오래된 슬라이스의 내용을 다른 용량으로 새 슬라이스에 복사 할 수 있습니다.
<code class="go">newSlice := make([]int, len(oldSlice), newCapacity) copy(newSlice, oldSlice)</code>
다음은 다음 방법을 설명하기위한 예입니다.
<code class="go">package main import "fmt" func main() { s := []int{1, 2, 3} // Length: 3, Capacity: 3 fmt.Printf("Original: Length: %d, Capacity: %d\n", len(s), cap(s)) // Using make and copy newSlice := make([]int, len(s), 10) copy(newSlice, s) fmt.Printf("After make and copy: Length: %d, Capacity: %d\n", len(newSlice), cap(newSlice)) // Using append s = append(s, 4, 5, 6, 7) fmt.Printf("After append: Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
이동 중에 슬라이스 길이를 넘어 인덱스에 액세스하려고하면 런타임 공황이 발생합니다. 슬라이스의 길이는 안전하게 액세스 할 수있는 지수의 범위를 정의하기 때문입니다.
예는 다음과 같습니다.
<code class="go">package main import "fmt" func main() { s := []int{1, 2, 3} // Length: 3 fmt.Println(s[0]) // This is valid fmt.Println(s[3]) // This will cause a runtime panic }</code>
당신이 볼 수있는 오류 메시지는 다음과 같습니다.
<code>panic: runtime error: index out of range [3] with length 3</code>
이 공황은 인덱스 3이 슬라이스의 범위를 벗어나 길이의 길이가 3이기 때문에 발생합니다.
Go에서 슬라이스의 길이와 용량은 다른 목적으로 사용되며 다른 역할을합니다.
len(s) - 1
까지 슬라이스의 요소에 액세스 할 수 있으며,이 이상 인덱스에 액세스하려고하면 런타임 공황이 발생합니다.append
함수를 사용하여 슬라이스의 길이를 용량까지 늘릴 수 있습니다.차이점에 대한 요약은 다음과 같습니다.
길이 :
len(s)
을 통해 액세스.용량 :
cap(s)
을 통해 액세스.다음은 이러한 개념을 설명하는 예입니다.
<code class="go">package main import "fmt" func main() { s := make([]int, 3, 5) // Length: 3, Capacity: 5 fmt.Printf("Initial: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 4) // Length: 4, Capacity: 5 fmt.Printf("After first append: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 5) // Length: 5, Capacity: 5 fmt.Printf("After second append: Length: %d, Capacity: %d\n", len(s), cap(s)) s = append(s, 6) // Length: 6, Capacity might increase fmt.Printf("After third append: Length: %d, Capacity: %d\n", len(s), cap(s)) }</code>
이 예에서 슬라이스는 길이 3과 용량 5로 시작합니다. 요소를 추가 할 때 길이는 용량에 도달 할 때까지 증가합니다. 원래 용량을 초과하면 용량이 증가 할 수 있습니다.
위 내용은 Go의 슬라이스의 용량과 길이는 얼마입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!