Heim >Backend-Entwicklung >Golang >Kann Go eine Strukturmethode nur mit ihrem Stringnamen aufrufen?

Kann Go eine Strukturmethode nur mit ihrem Stringnamen aufrufen?

Susan Sarandon
Susan SarandonOriginal
2024-11-17 01:57:031090Durchsuche

Can Go Invoke a Struct Method Using Only Its String Name?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn