>  기사  >  백엔드 개발  >  골랑 슬라이스의 길이와 용량은 얼마입니까?

골랑 슬라이스의 길이와 용량은 얼마입니까?

青灯夜游
青灯夜游원래의
2023-01-13 17:10:412708검색

golang에서 슬라이스 길이는 슬라이스의 요소 수입니다. 슬라이스 용량은 슬라이스가 생성된 인덱스에서 시작하는 기본 배열의 요소 수입니다. 즉, 슬라이스의 첫 번째 요소부터 계산됩니다. 기본 배열 요소 번호의 끝까지. 슬라이스의 길이와 용량은 내장 메소드 len()을 사용하여 길이를 얻을 수 있고, add()를 사용하여 슬라이스를 만드는 과정에서 cap()을 사용하여 용량을 얻을 수 있습니다. 슬라이스 길이가 슬라이스 용량보다 크면 슬라이스 용량이 두 배로 자동 확장됩니다.

골랑 슬라이스의 길이와 용량은 얼마입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어 슬라이스에는 길이와 용량이 있습니다.

  • 슬라이스의 길이는 슬라이스에 있는 요소의 수입니다.

  • 슬라이스의 용량은 슬라이스가 생성된 인덱스부터 시작하여 기본 배열의 요소 수입니다. 첫 번째 요소부터 기본 요소까지 배열 끝에 있는 요소 수입니다.

슬라이스는 인덱싱 가능하며 길이는 len() 메서드로 얻을 수 있습니다. 슬라이스는 슬라이스의 길이를 측정할 수 있는 용량을 계산하는 cap() 메서드를 제공합니다. 슬라이싱을 사용할 때 슬라이스의 길이를 슬라이스의 용량보다 크게 만들기 위해 추가를 사용하면 슬라이스의 용량이 자동으로 두 배의 형태로 확장됩니다.

슬라이싱은 실제로 배열의 특정 부분을 얻습니다. len Slice<=cap Slice<=len array

cap()의 결과는 슬라이스 가로채기의 주의 세부 사항을 결정합니다

var sTest01 []int
func sliceTest01() {
	fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) 
	sTest01 = append(sTest01, 1, 2, 3, 4, 5, 6)
	fmt.Printf("%T \n cap(sTest01) = %v \n", sTest01, cap(sTest01)) 
}

작업 결과:

[]int 
 cap(sTest01) = 0 
[]int 
 cap(sTest01) = 6

by 처음에는 슬라이스 길이가 0이고 요소를 추가한 후에는 실제 길이가 6

임을 알 수 있습니다. 배열이 값 유형이고 슬라이스가 참조 유형임을 증명하는 예:

func sliceTest02() {
x := [...]int{1, 2, 3, 4, 5, 6}
y := []int{100, 200, 300, 400}
w := x
z := y
w[0] = 777
z[0] = 999
fmt.Println("x = ", x, "\nw = ", w)
fmt.Println("y = ", y, "\nz = ", z)
}

실행 결과:

x =  [1 2 3 4 5 6]
w =  [777 2 3 4 5 6]
y =  [999 200 300 400]
z =  [999 200 300 400]

From 실행 결과에서 볼 수 있듯이 z의 변화는 y의 값에 영향을 미쳐 해당 슬라이스가 참조 유형임을 나타냅니다.

슬라이스에는 자체 데이터가 없으며 기본 배열에 대한 참조일 뿐입니다. 슬라이스에 대한 모든 수정 사항은 기본 배열에 반영되지만 슬라이스는 참조 유형입니다. 실행 결과:

func sliceCap() {
arr := [...]string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}
fmt.Println("cap(arr) = ", cap(arr), arr)

//截取数组,形成切片
s1 := arr[2:8]
fmt.Printf("%T \n", s1) 
fmt.Println("cap(s1) = ", cap(s1), s1)

//截取数组,形成切片
s2 := arr[4:7]
fmt.Printf("%T \n", s2)
fmt.Println("cap(s2) = ", cap(s2), s2) 

//截取数组,形成切片
s3 := s1[3:9]
fmt.Printf("%T \n", s3)
fmt.Println("cap(s3) = ", cap(s3), s3) 

//截取数组,形成切片
s4 := s2[4:7]
fmt.Printf("%T \n", s4)
fmt.Println("cap(s4) = ", cap(s4), s4) 

//证明切片是引用类型
s4[0] = "x"
fmt.Println(arr, s1, s2, s3, s4)
}

결과에서 슬라이스를 가로채면 슬라이스만 생성할 수 있음을 알 수 있습니다. 내용이 가로채기에 충분하지 않으면 후속 값이 기본 배열에서 제공됩니다. 길이가 충분하지 않으면 오류가 보고됩니다.

슬라이스가 비어 있는지 확인하기 위해 nil을 직접 사용하는 것은 부정확합니다.

Golang은 len이 0이지만 cap이 0이 아니거나 둘 다 0인 슬라이스를 허용하므로, 슬라이스를 nil과 직접 비교하는 대신 일반적으로 슬라이스의 길이를 len을 통해 얻어 빈 슬라이스인지 여부를 결정합니다.

【관련 추천:
Go 비디오 튜토리얼

, 프로그래밍 교육

위 내용은 골랑 슬라이스의 길이와 용량은 얼마입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.