Get name of function using reflection

前端 未结 3 1801
孤街浪徒
孤街浪徒 2020-12-25 14:06

I\'m trying to use Go\'s reflection system to retrieve the name of a function but I get an empty string when calling the Name method on its type. Is this the expected behavi

3条回答
  •  庸人自扰
    2020-12-25 14:31

    package main
    
    import "fmt"
    import "runtime"
    
    func main() {
        pc, _, _, _ := runtime.Caller(0)
        fmt.Println("Name of function: " + runtime.FuncForPC(pc).Name())
        fmt.Println()
    
        // or, define a function for it
        fmt.Println("Name of function: " + funcName())
        x()
    }
    
    func funcName() string {
        pc, _, _, _ := runtime.Caller(1)
        return runtime.FuncForPC(pc).Name()
    }
    
    func x() {
        fmt.Println("Name of function: " + funcName())
        y()
    }
    
    func y() {
        fmt.Println("Name of function: " + funcName())
        z()
    }
    func z() {
        fmt.Println("Name of function: " + funcName())
    }
    

    Output:

    Name of function: main.main

    Name of function: main.main
    Name of function: main.x
    Name of function: main.y
    Name of function: main.z

提交回复
热议问题