1. ホーム
  2. go

[解決済み] Goで関数の名前を取得するには?

2022-08-30 18:45:16

質問

ある関数が与えられたとき、その名前を得ることは可能ですか?言ってみてください。

func foo() {
}

func GetFunctionName(i interface{}) string {
    // ...
}

func main() {
    // Will print "name: foo"
    fmt.Println("name:", GetFunctionName(foo))
}

と言われましたが ランタイム.FuncForPC が役立つと言われましたが、その使い方を理解できませんでした。

どのように解決するのですか?

解決策を見つけました。

package main

import (
    "fmt"
    "reflect"
    "runtime"
)

func foo() {
}

func GetFunctionName(i interface{}) string {
    return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

func main() {
    // This will print "name: main.foo"
    fmt.Println("name:", GetFunctionName(foo))
}