美文网首页
golang中如何获得函数的函数名

golang中如何获得函数的函数名

作者: 个00个 | 来源:发表于2018-12-20 17:22 被阅读0次

    如何获取golang中的函数的名字, 这里需要用到反射. 可以看如下代码.

    重点使用 runtime.FuncForPC 这个函数获取函数名.
    使用strings.FieldsFunc 对得到的带 路径名和包名的 函数名进行必要的处理.

    package main
    
    import (
        "fmt"
        "reflect"
        "runtime"
        "strings"
        // "seps"
        "runtime/debug"
    )
    
    func foo() {
    }
    
    func GetFunctionName(i interface{}, seps ...rune) string {
        // 获取函数名称
        fn := runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
    
        // 用 seps 进行分割
        fields := strings.FieldsFunc(fn, func(sep rune) bool {
            for _, s := range seps {
                if sep == s {
                    return true
                }
            }
            return false
        })
    
        // fmt.Println(fields)
    
        if size := len(fields); size > 0 {
            return fields[size-1]
        }
        return ""
    }
    
    func main() {
        // This will print "name: main.foo"
        fmt.Println("name:", GetFunctionName(foo))
    
        // runtime/debug.FreeOSMemory
        fmt.Println(GetFunctionName(debug.FreeOSMemory))
        // FreeOSMemory
        fmt.Println(GetFunctionName(debug.FreeOSMemory, '.'))
        // FreeOSMemory
        fmt.Println(GetFunctionName(debug.FreeOSMemory, '/', '.'))
    }
    

    相关文章

      网友评论

          本文标题:golang中如何获得函数的函数名

          本文链接:https://www.haomeiwen.com/subject/uhfykqtx.html