Initialisierung eines leeren Slice: Bewertung zweier Ansätze
Um ein leeres Slice mit nicht fester Größe zu initialisieren, werden zwei gängige Methoden verwendet:
mySlice1 := make([]int, 0) mySlice2 := []int{}
Die Untersuchung der Unterschiede zwischen diesen Ansätzen ist entscheidend für die Optimierung der Codeleistung und das Verständnis der Speicherverwaltung Go.
Auswirkungen auf die Laufzeit
make([]int, 0) ruft die Laufzeitfunktion runtime.makeslice explizit intern auf (Go 1.16). Dies beinhaltet die Zuweisung von Speicher für den Slice-Header und das Backing-Array, auch wenn dadurch die Länge des Slice auf Null initialisiert wird. Außerdem wird die Kapazität des Slice auf die zugewiesene Größe eingestellt.
Null-Slice: Eine dritte Option
Eine andere Alternative besteht darin, ein Null-Slice zu erstellen:
var mySlice []int
Ein Null-Slice entspricht in seiner Funktionalität einem Null-Längen-Slice. Es verweist jedoch nicht auf zugrunde liegende Daten.
Überlegungen zum JSON-Marshalling
Es ist bemerkenswert, dass sich ein Null-Slice und ein leeres Slice beim JSON-Marshalling unterschiedlich verhalten. Ein Null-Slice wird in „null“ gemarshallt, während ein leeres Slice in „[]“ gemarshallt wird.
Speicherzuweisung
Keine der genannten Methoden, make([] int, 0), []int{} oder das Erstellen eines Null-Slices führt zu einer Speicherzuweisung.
Empfohlen Ansatz
Letztendlich hängt die Wahl des zu verwendenden Ansatzes von den spezifischen Anforderungen und Vorlieben ab. Berücksichtigen Sie Folgendes:
Das obige ist der detaillierte Inhalt vonGo Empty Slice-Initialisierung: „make([]int, 0)' vs. „[]int{}' vs. „nil' – Was ist das Beste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!