ホームページ >バックエンド開発 >Golang >Go Reflection を使用して関数の名前を取得するにはどうすればよいですか?

Go Reflection を使用して関数の名前を取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-12 20:45:02994ブラウズ

How to Obtain the Name of a Function Using Go Reflection?

Go のリフレクションを理解する: 関数名の取得

Go のリフレクション システムでは、関数名の取得はそれほど簡単ではありません。思われる。特定のシナリオで予期される動作は、Name メソッドの呼び出し時に空の文字列を取得することです。

予期しない空の文字列:

次のコード スニペットを使用すると、Nameメソッドは空の文字列を返します:

package main

import "fmt"
import "reflect"

func main() {
    typ := reflect.TypeOf(main)
    name := typ.Name()
    fmt.Println("Name of function: " + name)
}

この例では、リフレクションを使用して main 関数の名前を取得しようとします。ただし、出力には「関数の名前:」と表示され、空の名前が示されます。

runtime.FuncForPC を使用した解決策:

この問題を解決する鍵は、 runtime.FuncForPC 関数。この関数は、関数の名前を含む関数に関する追加情報を提供する Func 型へのポインターを返します。

package main

import "fmt"
import "reflect"
import "runtime"

func main() {
    name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
    fmt.Println("Name of function: " + name)
}

今度は、結果は "main.main" となり、関数の名前を正確に反映します。関数。パッケージ名を含まずに関数名のみを抽出したい場合は、strings.SplitN 関数を使用して文字列を分割できます。

以上がGo Reflection を使用して関数の名前を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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