Maison >développement back-end >Golang >Comment analyser et manipuler dynamiquement des structures implémentant une interface spécifique dans Golang ?

Comment analyser et manipuler dynamiquement des structures implémentant une interface spécifique dans Golang ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 10:29:021031parcourir

 How to Dynamically Scan and Manipulate Structures Implementing a Specific Interface in Golang?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn