Maison >développement back-end >Golang >Comment puis-je signaler correctement la fin du parcours dans un exercice d'équivalence d'arbre binaire Go ?
Exercice n°7 du Go Tour : Équivalence des arbres binaires
Lorsque vous essayez l'exercice d'équivalence des arbres binaires dans le Go tour, vous pouvez rencontrer un défi de signaler lorsqu’il ne reste plus d’éléments dans les arbres. Le code donné tente d'utiliser un canal pour communiquer les valeurs des arbres, mais il ne parvient pas à résoudre ce problème de signalisation.
Le problème
Fermer un canal pendant une traversée récursive met fin prématurément à la transmission des valeurs. L'utilisation de close(ch) dans la fonction Walk() ferme le canal avant que toutes les valeurs ne soient envoyées.
Une solution utilisant la fermeture
Une fermeture vous permet de créer un nom anonyme. fonction qui capture les variables de la portée environnante. Cela peut être utilisé pour générer une fonction de marche personnalisée qui ferme automatiquement le canal une fois son exécution terminée.
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Automatically closes the channel when this function returns var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t == nil { return } walk(t.Left) ch <- t.Value walk(t.Right) } walk(t) }
Dans cette solution, la fonction Walk() renvoie une fermeture de marche qui gère le parcours de l'arborescence. . Lorsque la fermeture se termine, elle ferme automatiquement le canal, indiquant qu'il n'y a plus de valeurs à envoyer. Cela garantit que l'extrémité réceptrice peut déterminer quand le parcours est terminé.
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!