Was ist der Unterschied zwischen Golang-Array und Slice?

青灯夜游
Freigeben: 2019-12-25 18:02:46
Original
3454 Leute haben es durchsucht

Was ist der Unterschied zwischen Golang-Array und Slice?

Der Unterschied zwischen Arrays und Slices in Golang:

● Slices sind Zeigertypen, Arrays sind Werttypen

● Arrays Die Länge von ist fest, Slices jedoch nicht (Slices sind dynamische Arrays)

● Slices haben ein Attribut mehr als Arrays: Kapazität (Obergrenze)

● Die unterste Schicht von Slices sind Arrays

Verwandte Empfehlungen: Golang-Tutorial

Da einer ein Zeigertyp und der andere ein Werttyp ist, was ist der Unterschied?

Schauen Sie sich dieses Beispiel an

	numbers := []int{1, 2, 3, 4, 5, 6}
	for i, e := range numbers {
		if i == len(numbers)-1 {
			numbers[0] += e
		} else {
			numbers[i+1] += e
		}
	}
	fmt.Println(numbers)
Nach dem Login kopieren

Das Ergebnis ist:

[22 3 6 10 15 21]
Nach dem Login kopieren

Ersetzen Sie das Slice durch ein Array:

	numbers := [...]int{1, 2, 3, 4, 5, 6}
	for i, e := range numbers {
		if i == len(numbers)-1 {
			numbers[0] += e
		} else {
			numbers[i+1] += e
		}
	}
	fmt.Println(numbers)
Nach dem Login kopieren

Das Ergebnis ist:

[7 3 5 7 9 11]
Nach dem Login kopieren

Es ist offensichtlich: Nach dem Durchlaufen wird jedes Element im Array zur Summe des aktuellen Elements und des vorherigen Elements. Das Gleiche gilt für das Slicing, mit der Ausnahme, dass jedes Element zum geänderten Wert des vorherigen Elements und zur Summe der Elemente wird aktuelles Element und.

Analyse: Während der for-Schleife sind die Elemente in Zahlen {1,2,3,4,5,6}. Die Variablen, die die for-Schleife empfangen, sind i und e, und i ist beide [0,1,2,3,4,5]. Aber e ist anders, das Array wird als Wert übergeben. Beim Durchlaufen des Arrays ist e also {1,2,3,4,5,6}. Beim Slicing wird ein Zeiger übergeben, sodass bei jeder Akkumulation der geänderte Wert vorliegt angesammelt.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Golang-Array und Slice?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage