Maison > développement back-end > Golang > le corps du texte

Pourquoi la définition d'une variable Go écrase-t-elle l'autre ?

DDD
Libérer: 2024-10-24 08:09:30
original
886 Les gens l'ont consulté

Why Does Setting One Go Variable Overwrite the Other?

Les variables Go sont écrasées

Dans ce code, l'auteur rencontre un problème où la variable pathA est écrasée lors de la définition de pathB. Cela suggère que les deux variables font référence au même tableau sous-jacent, ce qui entraîne des modifications de l'une affectant l'autre.

Le problème provient de l'utilisation de la fonction append() avec des tranches dans Go. Lors de l'ajout d'un élément à une tranche, Go vérifie si le tableau sous-jacent a une capacité suffisante pour accueillir le nouvel élément. Sinon, il alloue un tableau plus grand et copie les éléments existants.

Dans le code fourni, la route slice est utilisée pour créer à la fois le cheminA et le cheminB. Si la capacité du tableau de route sous-jacent est dépassée lors de l’ajout à pathA ou pathB, un nouveau tableau est alloué. Cependant, puisque pathA et pathB sont dérivés de la même tranche, ils partagent le même tableau sous-jacent.

Pour éviter ce problème, il est nécessaire de créer une copie indépendante de la route avant de l'utiliser pour initialiser pathA et pathB. Ceci peut être réalisé en utilisant les fonctions make() et copy(), comme indiqué dans la deuxième modification de l'auteur :

<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>
Copier après la connexion

Dans ce code révisé, newRoute est une tranche distincte avec son propre tableau sous-jacent. Cela garantit que pathA et pathB ont des copies indépendantes des données, empêchant les modifications apportées à l'une d'affecter l'autre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!