Strukturaufruf per String
Frage:
In Go ist ein Aufruf möglich eine Methode für eine Struktur, die einen String verwendet, der den Namen der Struktur darstellt, ohne explizit eine Instanz der zu initialisieren struct?
.NET Framework
In .NET Framework könnten wir Reflection.Assembly.GetType() und MethodInfo verwenden, um dieses Verhalten zu erreichen. Wir könnten den Typ aus der Assembly mithilfe des Zeichenfolgennamens des Typs abrufen und dann die Methode für eine Instanz dieses Typs aufrufen.
.NET Core
Allerdings In .NET Core sind Assembly.GetType() und MethodInfo nicht mehr verfügbar. Die Reflection-API in .NET Core bietet einen kontrollierteren und typsichereren Zugriff auf Metadaten.
Go
In Go bietet das Reflection-Paket eine Möglichkeit zur Überprüfung und Bearbeitung Typen zur Laufzeit. Die Funktion „reflect.TypeOf“ gibt den Typ eines Werts zurück, und die Funktion „MethodByName“ gibt die Methode mit dem angegebenen Namen für den angegebenen Typ zurück.
.Go-Codebeispiel
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! }
.NET-Code Beispiel
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!"); } } }
Zusammenfassung
In Go ist es nicht möglich, eine Methode für eine Struktur aufzurufen, indem nur eine Zeichenfolge verwendet wird, die den Namen der Struktur darstellt Es gibt keine vorinitialisierte Registrierung von Typnamen. Um diese Funktionalität zu erreichen, ist eine benutzerdefinierte Zuordnung oder Initialisierung erforderlich.
Das obige ist der detaillierte Inhalt vonKann Go eine Strukturmethode nur mit ihrem Stringnamen aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!