Golangs mysteriöse Array-Modifikation: Slices vs. Arrays
Anders als in C, wo Arrays von Natur aus als Referenz übergeben werden, scheint Gos Verhalten widersprüchlich zu sein. Um dieses scheinbare Paradoxon zu verstehen, tauchen wir in die Welt der Golang-Slices ein.
Wenn Arrays in Go ohne Angabe einer festen Länge deklariert werden, werden sie zu Slices. Bei diesen Slices handelt es sich lediglich um Deskriptoren, die auf einen Abschnitt eines zugrunde liegenden Arrays verweisen. Bei der Übergabe an Funktionen wird nur der Header (ein Zeiger auf das erste Element, die Länge und die Kapazität) kopiert.
Folglich wirken sich alle am Slice in der Funktion vorgenommenen Änderungen direkt auf das ursprüngliche Slice aus. Dies liegt daran, dass beide auf dasselbe zugrunde liegende Array verweisen. Dieses Verhalten ähnelt dem Pass-by-Reference-Mechanismus in C, auch wenn Arrays selbst in Go nicht explizit per Referenz übergeben werden.
Zusammenfassend ergibt sich die Unterscheidung von Go aus der Unterscheidung zwischen Arrays und Slices. Arrays werden als Wert übergeben, während Slices als Verweis auf das zugrunde liegende Array übergeben werden. Bei Slices werden alle an einer Funktion vorgenommenen Änderungen im Original-Slice widergespiegelt.
Weiterführende Lektüre zum tieferen Einblick in Slices:
Verwandte Fragen als Referenz:
Das obige ist der detaillierte Inhalt vonWie unterscheidet sich das Array-Änderungsverhalten von Go von C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!