Slice
Go sind Slices eine flexible und leistungsfähige Datenstruktur, die auf Arrays basiert. Sie bieten eine dynamische Alternative zu Arrays, deren Größe nach der Erstellung nicht verändert werden kann. Hier sind einige wichtige Eigenschaften und Konzepte von Slices in Go:
Eigenschaften von Slices
- Dynamische Größe: Im Gegensatz zu Arrays können Slices in ihrer Größe variieren. Sie können wachsen oder schrumpfen, wenn Elemente hinzugefügt oder entfernt werden.
- Unterliegendes Array: Ein Slice ist im Wesentlichen ein Verweis auf einen Abschnitt eines Arrays. Es enthält einen Zeiger auf das Array, die Länge des Segments und die Kapazität, also die maximale Anzahl von Elementen, die es enthalten kann.
- Länge und Kapazität: Die Länge eines Slices gibt an, wie viele Elemente es aktuell enthält, während die Kapazität angibt, wie viele Elemente es insgesamt aufnehmen kann, ohne dass Speicher neu zugewiesen werden muss.
Erstellung von Slices
Es gibt mehrere Möglichkeiten, Slices in Go zu erstellen:
Slice-Literale: Sie können ein Slice direkt mit einem Literal erstellen.
numbers := []int{1, 2, 3, 4, 5}
Slicing eines Arrays: Ein Slice kann aus einem bestehenden Array erstellt werden.
array := [5]int{10, 20, 30, 40, 50}
slice := array[1:4] // Enthält [20, 30, 40]
Verwendung der make
-Funktion: Mit der make
-Funktion können Sie ein Slice mit einer bestimmten Länge und Kapazität erstellen.
slice := make([]int, 5, 10)
Arbeiten mit Slices
Hinzufügen von Elementen: Mit der append
-Funktion können Sie Elemente zu einem Slice hinzufügen. Wenn das Hinzufügen von Elementen die Kapazität überschreitet, wird ein neues Array mit doppelter Kapazität erstellt und die Elemente werden kopiert.
slice = append(slice, 6)
Länge und Kapazität abfragen: Die Funktionen len()
und cap()
geben die aktuelle Länge und Kapazität eines Slices zurück.
fmt.Println(len(slice)) // Ausgabe: Länge des Slices
fmt.Println(cap(slice)) // Ausgabe: Kapazität des Slices
Slices sind eine der am häufigsten verwendeten Datenstrukturen in Go aufgrund ihrer Flexibilität und Effizienz im Umgang mit Sammlungen von Daten.