Dans Go, créer une nouvelle instance d'un type à partir d'une chaîne n'est pas une tâche simple. Les mécanismes de typage statique et d'élimination de code mort de Go rendent difficile la création dynamique d'objets basés sur des noms de types stockés sous forme de chaînes.
Pour remédier à cette limitation, une approche consiste à maintenir une map[string]reflect.Type globale. Cette carte peut être renseignée dans la fonction init() des packages définissant les types détectables. En utilisant cette carte, vous pouvez rechercher le reflet.Type du type souhaité et utiliser Reflect.New pour obtenir un pointeur vers un nouvel objet de ce type.
type MyStruct struct { // ... } func init() { register("MyStruct", reflect.TypeOf(MyStruct{})) }
Une fois inscrit, vous pouvez créer un nouvelle instance utilisant la réflexion :
newObject := reflect.New(registered["MyStruct"]).Elem().Interface() myStruct := newObject.(MyStruct)
Cependant, il est important de considérer que la réflexion peut introduire une surcharge de performances et augmenter la complexité de votre code. Il peut être plus approprié d'explorer des approches alternatives, telles que :
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!