Go のリフレクションを使用した関数名へのアクセス
Go のリフレクションを使用すると、開発者は任意の変数の型と値をイントロスペクトできます。一般的なタスクの 1 つは、関数の名前を取得することです。ただし、関数の型で Name メソッドに直接アクセスしようとすると、空の文字列が返される可能性があります。
期待される動作
提供されたコード スニペットは、必要なコードを正しくインポートします。反射用のパッケージ。ただし、型から関数名を直接取得しようとすると問題が発生します。
name := typ.Name()
Name メソッドは型ではなく実際の関数ポインターに対して動作するため、このアプローチでは期待どおりの結果が得られません。正しい名前を取得するには、ランタイム パッケージの FuncForPC 関数を使用する必要があります。
Solution
FuncForPC 関数は、関数の Reflect.Value へのポインターを受け取ります。そして *Func オブジェクトを返します。このオブジェクトは、関数の名前を取得するために使用できる正しい Name メソッドを提供します。
name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
提供されたデモを使用すると、コードは「main.main」を正しく出力するようになります。関数名のみが必要な場合は、返された文字列を分割することで関数名を抽出できます。
結論
リフレクションと FuncForPC 関数を利用することで、開発者は関数名を正確に取得できます。 Go の関数の名前。この手法により、コード構造の検査や動的な関数呼び出しの実行など、さまざまなユースケースが可能になります。
以上がGo でリフレクションを使用して関数名を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。