web-dev-qa-db-fra.com

Références de plage à la place des valeurs

J'ai vu que la plage renvoie la clé et la "copie" de la valeur. Existe-t-il un moyen pour cette plage de renvoyer l'adresse de l'article? Exemple

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("--")
    }
}

http://play.golang.org/p/AFOGG9NGpx

Ici, "champ" n'est pas modifié car la plage envoie la copie du champ. Dois-je utiliser l'index ou existe-t-il un autre moyen de modifier la valeur?

Merci d'avoir lu.

64
Epitouille

La réponse courte et directe: non, utilisez l'index du tableau au lieu de la valeur

Ainsi, le code ci-dessus devient:

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("--")
    }
}
91
MushinNoShin