首页 > 后端开发 > Golang > 正文

Go 可以仅使用其字符串名称来调用结构体方法吗?

Susan Sarandon
发布: 2024-11-17 01:57:03
原创
927 人浏览过

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

通过字符串调用结构体

问题:

在 Go 中是否可以调用使用表示结构名称的字符串的结构上的方法,无需显式初始化该结构的实例struct?

.NET Framework

在 .NET Framework 中,我们可以使用 Reflection.Assembly.GetType() 和 MethodInfo 来实现此行为。我们可以使用类型的字符串名称从程序集中获取类型,然后在该类型的实例上调用该方法。

.NET Core

但是,在 .NET Core 中,Assembly.GetType() 和 MethodInfo 不再可用。 .NET Core 中的反射 API 提供了对元数据的更受控制和类型安全的访问。

Go

在 Go 中,反射包提供了一种检查和操作的方法运行时的类型。 Reflect.TypeOf 函数返回值的类型,MethodByName 函数返回给定类型上具有给定名称的方法。

.Go 代码示例

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 代码示例

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!");
        }
    }
}
登录后复制

摘要

在 Go 中,不可能仅使用表示结构名称的字符串来调用结构上的方法,如没有预先初始化的类型名称注册表。需要自定义映射或初始化才能实现此功能。

以上是Go 可以仅使用其字符串名称来调用结构体方法吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板