Maison > développement back-end > Golang > le corps du texte

Go peut-il invoquer une méthode Struct en utilisant uniquement son nom de chaîne ?

Susan Sarandon
Libérer: 2024-11-17 01:57:03
original
927 Les gens l'ont consulté

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

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

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

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!

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