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 ?
Réponses
Trop de publicités?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
}
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?