766 votes

Y a-t-il un foreach dans Go ?

Y a-t-il une construction foreach dans la langue de Go ? Puis-je itérer sur une tranche ou à l’aide de tableau un pour ?

1109voto

Keith Thompson Points 85120

http://golang.org/doc/go_spec.html#For_statements

Un "pour" avec une "gamme" de la clause parcourt toutes les entrées d'un tableau, d'une tranche, d'une chaîne ou d'une carte, ou valeurs reçues sur un canal. Pour chaque entrée, il attribue itération les valeurs correspondant à l'itération les variables puis exécute le bloc.

À titre d'exemple:

for index,element := range someSlice {
  // index is the index where we are
  // element is the element from someSlice for where we are
}

Si vous n'avez pas de soins sur l'index, vous pouvez utiliser _:

for _,element := range someSlice {
  // element is the element from someSlice for where we are
}

13voto

ceving Points 3990

L'exemple suivant montre comment utiliser l' range opérateur en for boucle pour mettre en œuvre un foreach boucle.

func PrintXml (out io.Writer, value interface{}) error {
    var data []byte
    var err error

    for _, action := range []func() {
        func () { data, err = xml.MarshalIndent(value, "", "  ") },
        func () { _, err = out.Write([]byte(xml.Header)) },
        func () { _, err = out.Write(data) },
        func () { _, err = out.Write([]byte("\n")) }} {
        action();
        if err != nil {
            return err
        }
    }
    return nil;
}

L'exemple itère sur un éventail de fonctions d'unifier la gestion des erreurs pour les fonctions. Un exemple complet est à Googles aire de jeux.

PS: il montre également que la pendaison accolades sont une mauvaise idée pour la lisibilité du code. Astuce: l' for condition se termine juste avant l' action() appel. Évident, n'est-ce pas?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X