Maison > développement back-end > Golang > Pourquoi la modification des valeurs à l'aide du mot-clé « range » de Go échoue-t-elle et comment les indices de tableau peuvent-ils fournir une solution ?

Pourquoi la modification des valeurs à l'aide du mot-clé « range » de Go échoue-t-elle et comment les indices de tableau peuvent-ils fournir une solution ?

Susan Sarandon
Libérer: 2024-12-27 18:27:15
original
155 Les gens l'ont consulté

Why Does Modifying Values Using Go's `range` Keyword Fail, and How Can Array Indices Provide a Solution?

L'utilisation des indices de tableau sur des valeurs de plage

Lors de l'utilisation du mot-clé range avec des tableaux ou des tranches dans Go, il est essentiel de comprendre qu'il renvoie la clé et une copie de la valeur, pas la référence de valeur d'origine. Ce comportement peut prêter à confusion lorsque vous tentez de modifier des valeurs au sein de la collection au cours de l'itération.

Dans l'exemple fourni :

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Copier après la connexion

Il est prévu que l'itération de plage attribue la chaîne "foo" à le champ de chaque élément du tableau. Cependant, lorsque la deuxième boucle imprime les valeurs mises à jour, tous les champs restent vides. Cela est dû à la sémantique de range basée sur la copie.

Pour modifier efficacement les valeurs dans le tableau pendant l'itération, il est nécessaire d'utiliser l'index du tableau au lieu de la variable de plage :

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for idx, _ := range array {
        array[idx].field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
Copier après la connexion

Cette modification garantit que la variable d'index fait référence à l'élément réel du tableau, permettant des mises à jour de champ appropriées et une sortie correcte dans la deuxième boucle.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal