当前功能名称

时间:2018-09-25 22:57:44

标签: go

是否可以包含我当前所在函数的名称?我想将其包含在调试日志中,而不是对功能名称进行硬编码,这在一段时间后会很麻烦。

谢谢。

1 个答案:

答案 0 :(得分:3)

您可以使用runtime.Callers

package main

import (
    "fmt"
    "runtime"
)

func printFuncName() {
    fpcs := make([]uintptr, 1)

    // Skip 2 levels to get the caller
    n := runtime.Callers(2, fpcs)
    if n == 0 {
        fmt.Println("MSG: NO CALLER")
    }

    caller := runtime.FuncForPC(fpcs[0] - 1)
    if caller == nil {
        fmt.Println("MSG CALLER WAS NIL")
    }

    // Print the name of the function
    fmt.Println(caller.Name())
}

func foo() {
    printFuncName()
}

func main() {
    foo()
}

输出(package.function)

main.foo