Maison > développement back-end > Golang > Comment découvrir dynamiquement des instances implémentant une interface Go au moment de l'exécution ?

Comment découvrir dynamiquement des instances implémentant une interface Go au moment de l'exécution ?

Susan Sarandon
Libérer: 2024-10-29 05:51:31
original
423 Les gens l'ont consulté

 How to Dynamically Discover Instances Implementing a Go Interface at Runtime?

Golang : Découverte d'instances implémentant une interface

En Golang, il est souvent souhaitable d'effectuer des opérations sur des instances d'un type spécifique ou celles implémentant une interface particulière. Cependant, le typage strict du langage présente un défi dans l'identification de toutes les instances qui satisfont à un critère donné au moment de l'exécution.

Présentation du problème

Considérez le cas d'utilisation suivant :

  • L'interface I définit deux méthodes : start() et stop().
  • Plusieurs structures (A, B et C) implémentent l'interface I.
  • Pendant le démarrage du programme, start() doit être invoqué sur toutes les instances de A, B et C.
  • De même, lors de la fin du programme, stop() doit être appelé sur ces instances.
  • Pour faciliter la découverte dynamique, il est préférable de ne pas coder en dur les noms de structure dans le code.

Discussion sur la solution

Le système de types de Golang ne permet pas la récupération à l'exécution de tous types implémentant une interface. En effet, Go est typé statiquement et le compilateur élimine les types et méthodes inutilisés pour optimiser le binaire résultant.

Approche alternative

Une solution alternative consiste à maintenir un map ou slice qui associe un identifiant aux instances implémentant l'interface. Chaque structure peut s'initialiser en ajoutant une instance à cette collection globale.

Par exemple :

<code class="go">var instMap = map[string]StartStopper

type A struct {}

func init() {
    instMap["A"] = new(A)
}</code>
Copier après la connexion

Au démarrage et à la fin, le programme peut parcourir la collection globale et invoquer les méthodes appropriées. sur chaque instance.

Extension pour instances multiples

Si plusieurs instances de chaque type peuvent exister, la collection globale doit être mise à jour chaque fois qu'une nouvelle instance est créée et supprimée lorsqu'elle il n'est plus utilisé. Cela garantit une bonne manipulation par le éboueur.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal