Dans Golang, vous pouvez rencontrer des scénarios dans lesquels vous devez créer de nouvelles instances de types en fonction de leurs noms stockés sous forme de chaînes . Même si cela était autrefois possible dans les anciennes versions de Go, ce n'est plus simple.
Go est un langage typé statiquement, ce qui signifie que le compilateur vérifie et applique les types de données à temps de compilation. Cela garantit la sécurité des types, mais signifie également que la création de nouvelles instances à partir de noms de types de chaînes n'est pas directement prise en charge.
Pour y parvenir, vous pouvez envisager d'utiliser la réflexion, qui fournit un moyen pour inspecter et manipuler des objets au moment de l'exécution. Cependant, les réflexions peuvent être complexes et introduire des pénalités de performances.
Une approche utilisant les réflexions consiste à maintenir une carte globale[string]reflect.Type. Cette carte peut être initialisée dans la fonction init() des packages concernés, garantissant que le compilateur inclut les types nécessaires dans l'exécutable.
Vous pouvez ensuite utiliser cette carte pour rechercher le reflet.Type du type souhaité et créez une nouvelle instance en utilisant Reflect.New. Pour extraire l'objet dans une interface, utilisez Reflect.New(yourtype).Elem().Interface().
Vous pouvez également envisager d'explorer une meilleure structuration du programme qui évite d'avoir besoin de reflets. Par exemple, utiliser des méthodes d'usine ou maintenir une interface map[string]func(){} avec des fonctions de création pour différents types peut fournir des solutions plus simples et plus efficaces.
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!