Dans Go, il est souvent nécessaire de créer de nouvelles instances de types de manière dynamique, par exemple lors de l'analyse des fichiers de configuration ou de la gestion de l'API demandes. Cela peut être réalisé par réflexion, mais le processus a évolué dans les versions récentes du langage.
Malheureusement, dans Go, créer un objet à partir d'une chaîne de type n'est pas simple en raison de la nature typée statiquement du langage. L'éditeur de liens supprime le code inutilisé, ce qui rend impossible la garantie de la disponibilité du type souhaité au moment de l'exécution.
Une solution de contournement consiste à maintenir une carte globale qui associe les noms de type (sous forme de chaînes) à leurs objets réflexion.Type correspondants. Cette carte peut être initialisée dans la fonction init() des packages qui définissent des types détectables.
À l'aide de cette carte, vous pouvez rechercher le reflet.Type du type souhaité et créer un nouvel objet en utilisant reflet.New. Pour extraire l'objet de la valeur réfléchie, vous pouvez utiliser Elem() pour déréférencer le pointeur et Interface() pour renvoyer la valeur réfléchie sous forme d'interface.
reflect.New(yourtype).Elem().Interface()
Cependant, il vaut la peine d'envisager des approches alternatives, telles que comme des méthodes d'usine ou une carte de fonctions de création, qui peuvent être plus efficaces et moins sujettes aux erreurs que de s'appuyer sur la réflexion.
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!