ホームページ >バックエンド開発 >Golang >リフレクションを使用して Go Struct メソッドを名前で呼び出すにはどうすればよいですか?

リフレクションを使用して Go Struct メソッドを名前で呼び出すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-27 20:39:11791ブラウズ

How Can I Call Go Struct Methods by Name Using Reflection?

Go 構造体とそのメソッドを名前で呼び出す

Go でリフレクションを扱うとき、オブジェクトのメソッドを呼び出す必要がある場合があります。名前の構造体。 Reflect パッケージ内の MethodByName() 関数が思い浮かびますが、その使用方法はすぐには分からないかもしれません。この記事は、構造体とそのメソッドを名前で呼び出すための簡略化されたアプローチを提供することを目的としています。

MethodByName() および StructByName()

StructByName() が必要であるという誤解MethodByName() を呼び出す前は正しくありません。 MethodByName() を直接利用して、目的のメソッドを取得できます。

名前による構造体メソッドの呼び出し

次に、構造体メソッドを名前で呼び出す方法を示す例を示します。

type MyStruct struct {
    //some feilds here
}

func (p *MyStruct) MyMethod() {
    println("My statement.")
}

// Notice there is no StructByName() function call here
CallFunc("MyStruct", "MyMethod") // prints "My statement."

この例では、*MyStruct のインスタンスでメソッド MyMethod が呼び出されます。

リフレクション ベースのアプローチ

構造体メソッドを名前で呼び出すためのリフレクション ベースのアプローチを次に示します。

package main

import "fmt"
import "reflect"

type T struct {
}

func (t *T) Foo() {
    fmt.Println("foo")
}

func main() {
    t := &T{}
    reflect.ValueOf(t).MethodByName("Foo").Call([]reflect.Value{})
}

このアプローチは、 struct のインスタンスを表す Value オブジェクトを取得するには、reflect.ValueOf を使用します。次に、MethodByName() を使用して目的のメソッドを取得し、その後 Call() を使用してこのメ​​ソッドを呼び出します。

以上がリフレクションを使用して Go Struct メソッドを名前で呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。