Go は文字列名のみを使用して構造体メソッドを呼び出すことができますか?

Susan Sarandon
リリース: 2024-11-17 01:57:03
オリジナル
926 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート