Maison >développement back-end >Golang >Comment puis-je instancier un nouveau type dans Go à partir d'une chaîne ?

Comment puis-je instancier un nouveau type dans Go à partir d'une chaîne ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-31 20:19:11438parcourir

How Can I Instantiate a New Type in Go from a String?

Instance nouveau type (Golang)

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 :

  • Méthodes d'usine : créez des objets via des fonctions d'usine prédéfinies qui renvoient des instances de types spécifiques.
  • Programmation dynamique : utilisez des interfaces et un registre d'exécution pour gérer la création d'objets en fonction des noms de types stockés dans des chaînes.

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!

Déclaration:
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