Heim  >  Artikel  >  Backend-Entwicklung  >  Reden wir über Slices in Go: Das dynamische Array-Duo!

Reden wir über Slices in Go: Das dynamische Array-Duo!

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 15:57:02751Durchsuche

Sie tauchen also in Go ein und hören von Slices. „Was sind überhaupt Scheiben?“ Sie fragen sich vielleicht. Reichen Arrays nicht aus? Nun, lass es uns aufschlüsseln! Slices sind ein Killer-Feature in Go. Sie ähneln Arrays, sind aber viel cooler – sie sind dynamisch und flexibel und können entsprechend den Anforderungen Ihres Programms wachsen und schrumpfen. Aber es gibt den ein oder anderen Haken auf dem Weg. Lass uns alles auspacken und dich mit dem Slice-Know-how vertraut machen!

Let

Scheiben: Arrays auf Steroiden

Im Kern sind Slices Arrays. Aber im Gegensatz zu statischen Arrays sind Slices dynamisch; Sie können ihre Größe ändern, was sehr praktisch ist, wenn Ihr Datenbedarf unvorhersehbar ist. Stellen Sie sich vor, Sie haben eine Liste mit Elementen, und manchmal sind es 5 Elemente, manchmal aber auch 50! Mit Scheiben ist das kein großes Problem. Sie ändern einfach ihre Größe – ein bisschen wie von Zauberhand. ✨

Aber hier ist die Sache: Jedes Mal, wenn sich die Größe eines Slice ändert, wird darunter ein brandneues Array erstellt und die Daten werden in dieses neue Array kopiert. Komfortabel? Definitiv! Hier entsteht jedoch ein gewisser Rechenaufwand. Jede Größenänderung bedeutet, dass Go neuen Speicher zuweisen und Dinge verschieben muss.

Wie zähmen wir dieses Biest? Geben Sie make ein

Hier ist ein praktischer Go-Tipp für Sie: Wenn Sie wissen, dass Sie viel Platz für ein Slice benötigen, verwenden Sie die Make-Funktion. Mit make([]T, len, cap) sagst du Go: „Hey, gib mir ein Stück dieser Art, mit dieser Länge und dieser Kapazität.“ Wenn Sie über eine betriebsbereite Anfangskapazität verfügen, sparen Sie sich die Kosten für eine spätere Größenänderung. Schlau, oder?

  • Zum Beispiel:
numbers := make([]int, 0, 100)

Dieser Abschnitt hat zunächst eine Kapazität von 100, enthält aber noch keine Elemente. Sie sind bereit, es aufzufüllen, ohne ständig die Größe der Dinge ändern zu müssen. Auf lange Sicht sparen Sie Leistung.

Länge vs. Kapazität: Das dynamische Scheiben-Duo

Jedes Stück hat eine Länge (len) und eine Kapazität (cap) und sie spielen unterschiedliche Rollen:

  • len(slice): Dies ist die Anzahl der Elemente, die sich derzeit im Slice befinden.
  • cap(slice): Dies ist die maximale Länge, die das Slice aufnehmen kann, bevor eine Größenänderung erforderlich ist. Nehmen wir an, Sie haben ein Stück x. Wenn Sie versuchen, auf x[n] mit einem n zuzugreifen, das größer als die Länge (len(x)) ist, erhalten Sie eine Fehlermeldung, dass der Wert außerhalb des Bereichs liegt. Aber keine Sorge! Wenn Sie einem Slice Elemente hinzufügen und dessen Kapazität erreicht ist, weist Go unter der Haube einfach ein größeres Array für Sie zu. Alles was Sie tun müssen, ist weiter zu programmieren.

Müssen Sie weitere Artikel hinzufügen? Treffen Sie das Anhängen

Wenn Sie ein Slice vergrößern möchten, ist Anhängen die Funktion Ihrer Wahl. Es dient zum Hinzufügen von Elementen am Ende Ihres Slice und passt die Größe des Slice bei Bedarf automatisch an. Verabschieden Sie sich (naja, meistens) von Fehlern außerhalb der Grenzen!

  • Hier ein praktisches Beispiel:
numbers := make([]int, 0, 100)

Wenn das Slice über genügend Kapazität für die neuen Elemente verfügt, wird es verwendet. Wenn nicht, erstellt „append“ ein neues Array mit mehr Platz und verschiebt Ihre Daten dorthin. So einfach ist das! Laut Effective Go wird append „ein neues zugrunde liegendes Array zuweisen“, wenn die Kapazität nicht ausreicht. Ziemlich ordentlich, oder?

Zusammenfassung

Slices in Go sind dein Freund – und ein mächtiger noch dazu. Sie ermöglichen Ihnen die flexible Arbeit mit Datensammlungen, während einige der schwierigsten Details der Speicherverwaltung verborgen bleiben. Aber denken Sie daran: Mit großer Kraft geht große Verantwortung einher. Jede Größenänderung bringt einen gewissen Rechenaufwand mit sich. Wenn Sie verstehen, wie Slices funktionieren und wie Make und Append dabei helfen können, sind Sie auf dem besten Weg, effizienten, eleganten Go-Code zu schreiben.

effektiv-gehen

Das obige ist der detaillierte Inhalt vonReden wir über Slices in Go: Das dynamische Array-Duo!. 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