Go의 슬라이스 용량 변경 이해
Go 슬라이스로 작업할 때는 용량을 포함한 기본 속성을 이해하는 것이 중요합니다. 슬라이스에서 마지막 n 항목을 삭제하면 용량이 유지되지만 처음 n 항목을 삭제하면 용량에 영향을 줍니다.
Go 슬라이스 구조
Go 슬라이스는 구조로 구현됩니다. 세 개의 필드로 구성:
<code class="go">type slice struct { array unsafe.Pointer len int cap int }</code>
마지막 n 항목 삭제
마지막 n 항목을 삭제할 때 슬라이스, s[:len(s)-n] 표현식을 사용하여 원본과 동일한 기본 배열을 공유하는 새 슬라이스를 만듭니다. 그러나 새 슬라이스의 길이는 줄어들지만 용량은 변경되지 않습니다. 이는 기본 배열에 나머지 요소를 수용할 만큼 충분한 용량이 있기 때문입니다.
첫 번째 n 항목 삭제
반면, 배열에서 처음 n 항목을 삭제할 때 슬라이스, s[n:] 표현식을 사용하여 더 짧은 길이의 새 슬라이스를 생성할 뿐만 아니라 새로운 기본 배열을 할당합니다. 새 슬라이스의 용량은 감소된 요소 수를 수용하도록 조정됩니다.
예
다음 코드를 고려하세요.
<code class="go">func main() { s := []int{2, 3, 5, 7, 11, 13} printSlice(s) // Drop its last two values s = s[:len(s)-2] printSlice(s) // Drop its first two values s = s[2:] printSlice(s) }</code>
출력에는 슬라이스를 조작할 때 길이, 용량 및 기본 배열 포인터의 변화가 표시됩니다.
ptr=0x450000 len=6 cap=6 [2 3 5 7 11 13] ptr=0x450000 len=4 cap=6 [2 3 5 7] ptr=0x450008 len=2 cap=4 [5 7]
결론
Go 슬라이스의 내부 구조를 이해하는 것은 효과적으로 조작하는 데 중요합니다. 마지막 n개 항목을 삭제하는 것이 처음 n개 항목을 삭제하는 것과 용량에 다른 영향을 미친다는 점을 인식함으로써 개발자는 코드를 최적화하고 슬라이스 크기 조정과 관련된 잠재적인 성능 문제를 방지할 수 있습니다.
위 내용은 Go 슬라이스 시작 부분에서 요소를 삭제하면 용량에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!