関数を指定すると、その名前を取得できますか?セイ:Goで関数の名前を取得するには?
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
私はruntime.FuncForPCが役立つだろうと言われましたが、私はそれを使用する方法を理解することができませんでした。
これはうまくいくようですが、ここでいくつかの注意が必要になるかもしれません:.Pointer()のドキュメント "vのKindがFuncの場合、返されるポインタは基になるコードポインタです。 vが無関係の値である場合にのみ、結果がゼロであることを保証する。 – jochen
@jochenは「単一機能ではない」とは、誤検出(つまり、別の機能のポインタ)を返す可能性があることを意味しますか? – themihai
@themihai私が引用した文は、https://golang.org/pkg/reflect/#Value.Pointer sayについてのすべての文書です。しかし、この見積もりは、異なる関数に対して同じポインタを得ることができると思われるようです。これが当てはまる場合、 'GetFunctionName'は異なる関数のために同じ名前を返すでしょうか? – jochen