Heim >Backend-Entwicklung >Golang >Wie lang und kapazitätsmäßig sind Golang-Scheiben?

Wie lang und kapazitätsmäßig sind Golang-Scheiben?

青灯夜游
青灯夜游Original
2023-01-13 17:10:412797Durchsuche

In Golang ist die Slice-Länge die Anzahl der Elemente im Slice; die Slice-Kapazität ist die Anzahl der Elemente im zugrunde liegenden Array, beginnend mit dem Index, an dem das Slice erstellt wird, d. h. ab dem ersten Element des Slice bis zum Ende der Nummer der zugrunde liegenden Array-Elemente. Die Länge und Kapazität eines Slice kann mit der integrierten Methode len() ermittelt werden, und cap() kann die Kapazität im Prozess der Verwendung des Slice ermitteln Länge des Slice größer als die Kapazität des Slice, dann wird die Kapazität des Slice automatisch durch Verdoppelung erweitert.

Wie lang und kapazitätsmäßig sind Golang-Scheiben?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, GO Version 1.18, Dell G3-Computer.

Go-Sprachscheiben haben Länge und Kapazität.

  • Die Länge eines Slice ist die Anzahl der Elemente im Slice.

  • Die Kapazität eines Slice ist die Anzahl der Elemente im zugrunde liegenden Array, beginnend mit dem Index, an dem das Slice erstellt wurde, d. h. ab sein erstes Element bis zu seinem zugrunde liegenden Die Anzahl der Elemente am Ende des Arrays.

Slices sind indizierbar und die Länge kann mit der Methode len() ermittelt werden. Zur Berechnung der Kapazität steht die Methode cap() zur Verfügung, mit der gemessen werden kann, wie lang das Slice sein kann. Wenn wir Slicing verwenden und Append verwenden, um die Länge des Slice größer als die Kapazität des Slice zu machen, wird die Kapazität des Slice automatisch um das Doppelte erweitert.

Slicing erhält tatsächlich einen bestimmten Teil des Arrays, len Slice<=cap Slice<=len Array

Das Ergebnis von cap() bestimmt die Aufmerksamkeitsdetails des Slice-Abfangens

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)) 
}

Das Operationsergebnis:

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

von Es ist ersichtlich, dass die Slice-Länge zu Beginn 0 beträgt. Nach dem Hinzufügen von Elementen beträgt die tatsächliche Länge 6

Beispiel, das beweist, dass das Array ein Werttyp und das Slice ein Referenztyp ist:

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)
}

Wird ausgeführt Ergebnis:

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 Wie aus den laufenden Ergebnissen ersichtlich ist, wirkt sich die Änderung von z auf den Wert von y aus, was darauf hinweist, dass es sich bei dem Slice um einen Referenztyp handelt.

Slice hat keine eigenen Daten, es ist lediglich eine Referenz auf das zugrunde liegende Array. Alle am Slice vorgenommenen Änderungen werden im zugrunde liegenden Array widergespiegelt, während Slices Referenztypen sind Laufergebnisse:

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)
}

Aus den Ergebnissen können wir ersehen, dass das Abfangen von Slices nur Slices erzeugen kann. Wenn der Inhalt zum Abfangen nicht ausreicht, werden die nachfolgenden Werte aus dem zugrunde liegenden Array bereitgestellt. Wenn die Länge nicht ausreicht, wird ein Fehler gemeldet.

Um festzustellen, ob ein Slice leer ist, ist es ungenau, Null direkt zu verwenden.

Golang erlaubt Slices, bei denen len 0 ist, cap aber nicht 0 oder beide 0 sind. Daher wird die Länge des Slice im Allgemeinen über len ermittelt, um festzustellen, ob es sich um ein leeres Slice handelt, anstatt das Slice direkt mit Null zu vergleichen.

【Verwandte Empfehlungen:
Go-Video-Tutorial

, Programmierunterricht

Das obige ist der detaillierte Inhalt vonWie lang und kapazitätsmäßig sind Golang-Scheiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn