> 백엔드 개발 > Golang > Go 슬라이스를 다시 슬라이스하면 용량이 변경되는 이유는 무엇입니까?

Go 슬라이스를 다시 슬라이스하면 용량이 변경되는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-26 13:42:16
원래의
549명이 탐색했습니다.

Why Does Re-slicing a Go Slice Change Its Capacity?

Golang에서 슬라이스 다시 슬라이싱

Golang에서 슬라이스는 동적 크기 조정이 가능한 유연한 데이터 구조입니다. 그러나 슬라이스를 다시 슬라이싱하는 동작을 이해하는 것은 혼란스러울 수 있습니다. 제공된 코드를 자세히 살펴보고 c의 용량에 대한 수수께끼 같은 동작을 설명하겠습니다.

func main() {
    b := make([]int, 0, 5) // Create an empty slice with a capacity of 5
}
로그인 후 복사

여기서 b는 처음에는 비어 있지만 용량은 5입니다. 이는 기본 배열이 최대 5개를 수용할 수 있음을 의미합니다. elements.

c := b[:2] // Create a slice c from b, starting at the beginning (index 0) and ending just before index 2
로그인 후 복사

이제 c는 b의 처음 두 요소를 참조하는 슬라이스입니다. 그러나 c는 기본 배열의 복사본을 생성하지 않습니다. 여전히 b에 대한 창입니다.

printSlice("c", c) // Print the length, capacity, and elements of c
// Output: c len=2 cap=5 [0 0]
로그인 후 복사

예상대로 c의 길이는 2이고 용량은 5입니다. 이는 c가 여전히 b가 나타내는 전체 배열에 액세스할 수 있고 나머지 3이 있기 때문입니다. 확장을 통해 잠재적으로 액세스할 수 있는 사용되지 않은 요소.

d := c[2:5] // Create a slice d from c, starting at index 2 and ending at the end (index 5)
로그인 후 복사

여기서 d는 인덱스 2부터 끝(인덱스 5)까지 c의 요소를 참조하는 슬라이스입니다. c의 용량은 5이므로 d는 최대 3개의 요소를 추가로 확장할 수 있습니다.

printSlice("d", d) // Print the length, capacity, and elements of d
// Output: d len=3 cap=3 [0 0 0]
로그인 후 복사

d는 c의 나머지 요소를 참조하므로 길이가 3이고, 수용할 수 있으므로 용량은 3입니다. b 내에 최대 3개의 요소가 추가됩니다.

결론적으로 슬라이스의 용량은 기본 어레이의 용량과 해당 어레이 내 슬라이스의 시작 위치에 따라 결정됩니다. 이 관계를 이해함으로써 개발자는 Golang 프로그램에서 효과적으로 슬라이스를 조작하고 동작을 제어할 수 있습니다.

위 내용은 Go 슬라이스를 다시 슬라이스하면 용량이 변경되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿