Maison >développement back-end >Golang >Pourquoi l'utilisation du mot-clé Range de Go ne parvient-elle pas à modifier les éléments du tableau et comment les indices de tableau peuvent-ils fournir une solution ?

Pourquoi l'utilisation du mot-clé Range de Go ne parvient-elle pas à modifier les éléments du tableau et comment les indices de tableau peuvent-ils fournir une solution ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-17 11:23:25218parcourir

Why Does Using Go's Range Keyword Fail to Modify Array Elements, and How Can Array Indices Provide a Solution?

Utilisation d'indices de tableau pour la modification d'éléments au lieu de valeurs de plage

Dans la programmation Go, le mot-clé range parcourt une collection et renvoie à la fois la clé et la copie de la valeur de chaque élément. Ce comportement peut gêner la modification des valeurs au sein de la boucle. L'exemple suivant illustre ce problème :

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    // Attempt to modify field using range values:
    for _, e := range array {
        e.field = "foo"
    }

    // Verify that field hasn't been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

Dans ce code, nous tentons de modifier le champ de chaque élément du tableau à l'aide d'une boucle de plage. Cependant, puisque la plage renvoie une copie de la valeur, les éléments réels du tableau restent inchangés. Cela fait que toutes les valeurs de champ restent vides.

Solution : Utilisation d'indices de tableau

Pour contourner ce problème et modifier les éléments réels, vous devez utiliser des indices de tableau au lieu de les valeurs renvoyées par la boucle de plage. Voici le code modifié :

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

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

    // Verify that field has been modified:
    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

En utilisant l'index de chaque élément au lieu de la valeur, nous pouvons directement accéder et modifier les éléments réels du tableau. Cela garantit que les valeurs des champs sont correctement mises à jour.

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:
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