Heim >Backend-Entwicklung >Golang >Wie geht Go mit der dynamischen Array-Zuweisung um, wenn die Array-Größen zur Kompilierungszeit unbekannt sind?
Dynamische Array-Zuweisung in Go: Verwendung von Slices
Im Gegensatz zu anderen Programmiersprachen werden Go-Arrays nicht direkt zur Laufzeit zugewiesen. Dies kann eine Herausforderung darstellen, wenn die Größe eines Arrays dynamisch bestimmt werden muss.
Das Dilemma von Arrays mit fester Größe
Betrachten Sie den folgenden Code, der eine Zuweisung versucht ein Array mit einer Laufzeitgröße:
n := 1 var a [n]int
Dieser Code führt zu einem Fehler, da Go erfordert, dass die Arraygröße ein bekannter konstanter Ausdruck ist zur Kompilierzeit.
Die Lösung: Slices
Die Lösung für dieses Dilemma besteht darin, Slices anstelle von Arrays zu verwenden. Im Gegensatz zu Arrays lässt sich die Größe von Slices zur Laufzeit bestimmen. Mit der integrierten Funktion make() kann ein Slice mit einer angegebenen Länge und Kapazität erstellt werden:
s := make([]int, n, 2*n)
In diesem Beispiel ist s ein Slice aus ganzen Zahlen mit einer Anfangslänge von n und einer Kapazität von 2*n. Dies bedeutet, dass das Slice bis zu 2*n Elemente enthalten kann, bevor es neu zugewiesen werden muss.
Warum nicht Arrays?
Es mag merkwürdig erscheinen, warum Go dies nicht tut ermöglichen die direkte Zuordnung von Arrays mit Laufzeitgrößen. Der Grund dafür ist, dass Go in den meisten Szenarien Slices gegenüber Arrays bevorzugt. Slices bieten die Flexibilität, die Größe dynamisch zu ändern und vermeiden die Notwendigkeit einer expliziten Speicherverwaltung, die mit Arrays einhergeht.
Daher besteht der empfohlene Ansatz in Go darin, mit Slices zu arbeiten, die sowohl die Flexibilität der Laufzeitzuweisung als auch die Einfachheit bieten der automatischen Speicherverwaltung.
Das obige ist der detaillierte Inhalt vonWie geht Go mit der dynamischen Array-Zuweisung um, wenn die Array-Größen zur Kompilierungszeit unbekannt sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!