Maison >développement back-end >Golang >Comment créer des itérateurs idiomatiques dans Go ?
Les itérateurs sont essentiels pour parcourir les collections de manière pratique et expressive. Bien que les chaînes puissent initialement sembler être une option viable, leur modèle push et leurs problèmes de fuite de mémoire limitent leur utilité.
Fermetures :
Fermetures offrent une méthode simple pour implémenter des itérateurs. En capturant une variable dans une fonction, la fonction peut être utilisée comme itérateur, chaque appel incrémentant la variable et renvoyant sa valeur. Par exemple :
import "fmt" func newEven() func() int { n := 0 return func() int { n += 2 return n } }
Types nommés avec méthodes :
Une autre approche consiste à définir un type nommé avec une méthode qui itère sur la collection. Cette méthode peut mettre à jour son état interne et renvoyer l'élément suivant de la séquence. Par exemple :
type even int func (e *even) next() int { *e += 2 return int(*e) }
Compromis et sélection :
Le choix de l'approche dépend d'exigences spécifiques. Les canaux excellent dans les scénarios simultanés, les fermetures offrent flexibilité et facilité d'utilisation, tandis que les types nommés offrent clarté et encapsulation.
Les concepts de programmation fonctionnelle peuvent être exploités pour chaîner plusieurs itérateurs pour des transformations complexes. Les fonctions peuvent être composées en itérateurs, permettant des opérations telles que le mappage, le filtrage et le pliage.
Voici un exemple d'enchaînement d'itérateurs à l'aide de fermetures :
import "fmt" type intGen func() int func newEven() intGen { n := 0 return func() int { n += 2 return n } } func mapInt(g intGen, f func(int) int) intGen { return func() int { return f(g()) } } func square(i int) int { return i * i } func main() { gen := mapInt(newEven(), square) fmt.Println(gen()) fmt.Println(gen()) fmt.Println(gen()) }
En utilisant la flexibilité et l'extensibilité de Go types de fonctions, les itérateurs peuvent être combinés sans effort pour transformer et traiter efficacement les collections.
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!