Invocation de structure par chaîne
Question :
En Go, est-il possible d'invoquer une méthode sur une structure utilisant une chaîne représentant le nom de la structure, sans initialiser explicitement une instance de la struct?
.NET Framework
Dans .NET Framework, nous pourrions utiliser Reflection.Assembly.GetType() et MethodInfo pour obtenir ce comportement. Nous pourrions obtenir le type de l'assembly en utilisant le nom de chaîne du type, puis appeler la méthode sur une instance de ce type.
.NET Core
Cependant, dans .NET Core, Assembly.GetType() et MethodInfo ne sont plus disponibles. L'API de réflexion dans .NET Core offre un accès plus contrôlé et sécurisé aux métadonnées.
Go
Dans Go, le package de réflexion fournit un moyen d'inspecter et de manipuler types au moment de l’exécution. La fonction reflect.TypeOf renvoie le type d'une valeur et la fonction MethodByName renvoie la méthode avec le nom donné sur le type donné.
.Go Code Sample
package main import ( "fmt" "reflect" ) type MyStruct struct { } func (a *MyStruct) Hello() { fmt.Println("Hello from MyStruct!") } func main() { // Get the type of MyStruct. t := reflect.TypeOf(MyStruct{}) // Get the method with the name "Hello" on MyStruct. m := t.MethodByName("Hello") // Create a new instance of MyStruct. v := reflect.New(t) // Invoke the Hello method on the new instance. m.Call(v) // Output: Hello from MyStruct! }
Code .NET Exemple
using System; using System.Reflection; public class Program { public static void Main(string[] args) { // Get the type of MyStruct using Reflection. Type t = Assembly.GetExecutingAssembly().GetType("MyStruct"); // Get the method with the name "Hello" on MyStruct. MethodInfo m = t.GetMethod("Hello"); // Create a new instance of MyStruct. object v = Activator.CreateInstance(t); // Invoke the Hello method on the new instance. m.Invoke(v, null); // Output: Hello from MyStruct! } public struct MyStruct { public void Hello() { Console.WriteLine("Hello from MyStruct!"); } } }
Résumé
Dans Go, il n'est pas possible d'invoquer une méthode sur une structure en utilisant uniquement une chaîne représentant le nom de la structure, car il n'existe pas de registre pré-initialisé de noms de types. Un mappage ou une initialisation personnalisé est requis pour obtenir cette fonctionnalité.
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!