Heim >Backend-Entwicklung >Golang >Warum überschreibt die Einstellung einer Go-Variable die andere?

Warum überschreibt die Einstellung einer Go-Variable die andere?

DDD
DDDOriginal
2024-10-24 08:09:30955Durchsuche

Why Does Setting One Go Variable Overwrite the Other?

Go-Variablen werden überschrieben

In diesem Code stößt der Autor auf ein Problem, bei dem die Variable pathA beim Festlegen von pathB überschrieben wird. Dies deutet darauf hin, dass beide Variablen auf dasselbe zugrunde liegende Array verweisen, was dazu führt, dass sich Änderungen an einer Variablen auf die andere auswirken.

Das Problem ergibt sich aus der Verwendung der append()-Funktion mit Slices in Go. Beim Anhängen eines Elements an einen Slice prüft Go, ob das zugrunde liegende Array über genügend Kapazität verfügt, um das neue Element aufzunehmen. Wenn nicht, wird ein größeres Array zugewiesen und die vorhandenen Elemente kopiert.

Im bereitgestellten Code wird die Slice-Route verwendet, um sowohl PfadA als auch PfadB zu erstellen. Wenn die Kapazität des zugrunde liegenden Routen-Arrays beim Anhängen an PfadA oder PfadB überschritten wird, wird ein neues Array zugewiesen. Da jedoch sowohl PfadA als auch PfadB von demselben Slice abgeleitet sind, nutzen sie dasselbe zugrunde liegende Array.

Um dieses Problem zu vermeiden, muss eine unabhängige Kopie der Route erstellt werden, bevor sie zum Initialisieren von PfadA und PfadB verwendet wird. Dies kann mit den Funktionen make() und copy() erreicht werden, wie in der zweiten Bearbeitung des Autors gezeigt:

<code class="go">newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i])+1)*2)
copy(newRoute, prePaths[i])

pathA := append(newRoute, nextA)
pathB := append(prePaths[i], nextB)</code>

In diesem überarbeiteten Code ist newRoute ein separater Slice mit einem eigenen zugrunde liegenden Array. Dadurch wird sichergestellt, dass PfadA und PfadB über unabhängige Kopien der Daten verfügen, wodurch verhindert wird, dass sich Änderungen an einem Pfad auf den anderen auswirken.

Das obige ist der detaillierte Inhalt vonWarum überschreibt die Einstellung einer Go-Variable die andere?. 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