goreflectiongo-reflect

Get name of function using reflection


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 behavior?

This is a simple example of how I approach the problem:

package main

import "fmt"
import "reflect"

func main() {
    typ := reflect.TypeOf(main)
    name := typ.Name()
    fmt.Println("Name of function" + name)
}

Solution

  • The solution is to use FuncForPc which returns a *Func.

    This returns "main.main" :

    package main
    
    import "fmt"
    import "reflect"
    import "runtime"
    
    
    func main() {
        name := runtime.FuncForPC(reflect.ValueOf(main).Pointer()).Name()
        fmt.Println("Name of function : " + name)
    }
    

    If you want "main", just tokenize it.