内省 Go 代码:检索当前函数名称
在 Go 中,获取当前函数名称对于调试和跟踪至关重要。 gcc 中的 FUNCTION 宏提供了这个功能,我们的目标是在 Go 中模拟它。
解决方案
关键在于运行时包。这是一个解决方案:
import ( "fmt" "runtime" ) func trace() { pc := make([]uintptr, 10) // Need at least 1 entry runtime.Callers(2, pc) f := runtime.FuncForPC(pc[0]) file, line := f.FileLine(pc[0]) fmt.Printf("%s:%d %s\n", file, line, f.Name()) }
这个函数的工作原理是:
更新的示例
对于 Go 版本 1.7 ,推荐的方法是使用runtime.CallersFrames而不是runtime.FuncForPC。下面是更新的示例:
import ( "fmt" "runtime" ) func trace() { pc := make([]uintptr, 10) // Need at least 1 entry runtime.CallersFrames(2, pc) frame, _ := runtime.CallersFrames(2, pc) fmt.Printf("%s:%d %s\n", frame[0].File, frame[0].Line, frame[0].Function) }
以上是如何获取Go代码中当前的函数名称?的详细内容。更多信息请关注PHP中文网其他相关文章!