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 :
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>
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!