Golang : analyser des structures avec des implémentations spécifiques
Dans Go, manipuler plusieurs structures avec une interface partagée peut poser des défis. Bien qu'il soit possible de gérer individuellement chaque instance de structure, vous devrez peut-être rechercher et manipuler automatiquement toutes les structures adhérant à une interface spécifique.
Le problème
Le scénario implique une implémentation d'une interface I par plusieurs structures (A, B et C). Au démarrage de l'application, vous devez appeler la méthode start() pour chaque instance A, B et C. De même, à la fin, vous devez appeler la méthode stop() sur ces instances. Cependant, vous souhaitez éviter de coder en dur ces structures spécifiques dans votre code, ce qui permet des modifications transparentes à mesure que de nouvelles structures implémentant l'interface I sont introduites.
La réponse
Malheureusement, dans Go, l'approche que vous envisagez n'est pas réalisable. Go est un langage typé statiquement et l'éditeur de liens élimine les définitions et méthodes de type inutilisées. Par conséquent, les types qui ne sont pas explicitement référencés dans votre code seront omis.
Solution alternative
Une approche alternative consiste à créer une carte globale (ou tranche) qui stocke instances de chaque structure implémentant l’interface I. Ces instances peuvent être enregistrées lors de l'initialisation à l'aide d'une fonction init :
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
Au démarrage, vous pouvez parcourir la carte et appeler la méthode Start() sur chaque instance.
Gestion de plusieurs instances
S'il peut y avoir plusieurs instances de chaque type de structure, vous devrez modifier votre processus d'enregistrement pour ajouter des instances à la carte lors de leur création. Vous devez également supprimer les instances lorsqu'elles ne sont plus utilisées pour éviter d'éventuelles fuites de mémoire.
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!