Heim > Artikel > Backend-Entwicklung > Wie lang und kapazitätsmäßig sind Golang-Scheiben?
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.
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
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!