Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen Golang-Array und Slice?

Was ist der Unterschied zwischen Golang-Array und Slice?

青灯夜游
青灯夜游Original
2019-12-25 18:02:463366Durchsuche

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)

Das Ergebnis ist:

[22 3 6 10 15 21]

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)

Das Ergebnis ist:

[7 3 5 7 9 11]

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!

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
Vorheriger Artikel:Welche Sprache ist Golang?Nächster Artikel:Welche Sprache ist Golang?