一尘不染

如何在Go中获取函数名称?

go

给定一个函数,可以得到它的名字吗?说:

func foo() {
}

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

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

有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。


阅读 517

收藏
2020-07-02

共1个答案

一尘不染

很抱歉回答我自己的问题,但我找到了解决方案:

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))
}
2020-07-02