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
Libérer: 2024-12-31 20:19:11
original
430 Les gens l'ont consulté

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{}))
}
Copier après la connexion

Une fois inscrit, vous pouvez créer un nouvelle instance utilisant la réflexion :

newObject := reflect.New(registered["MyStruct"]).Elem().Interface()
myStruct := newObject.(MyStruct)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal