首頁 >後端開發 >Golang >Go 可以僅使用其字串名稱來呼叫結構體方法嗎?

Go 可以僅使用其字串名稱來呼叫結構體方法嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-17 01:57:031097瀏覽

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

透過字串呼叫結構體

問題:

在 Go🎜>問題:

在 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 函數傳回給定類型上具有給定名稱的方法。

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!
}
.Go 程式碼範例

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!");
        }
    }
}
.NET 程式碼範例

在Go中,不可能僅使用表示結構名稱的字串來呼叫結構上的方法,例如沒有預先初始化的類型名稱註冊表。需要自訂映射或初始化才能實現此功能。

以上是Go 可以僅使用其字串名稱來呼叫結構體方法嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn