代码拉取完成,页面将自动刷新
package runtime
import (
"reflect"
"runtime"
_ "unsafe"
)
const (
invalidProgramCounters = 0
invalidFunctionName = "<invalid runtimeFunctionForPC>"
unknownFilename = "<unknown file>"
unknownLine = -1
)
// Caller 获取正在运行的函数名, 文件名以及行号
func Caller() (function, file string, line int) {
pcs := make([]uintptr, 1)
runtime.Callers(2, pcs)
pc := pcs[0]
return FuncInfo(pc)
}
//go:linkname runtimeFunctionForPC runtime.FuncForPC
func runtimeFunctionForPC(pc uintptr) *runtime.Func
// 获取pc
func programCounters(v any) uintptr {
value := reflect.ValueOf(v)
var pc uintptr
if value.Kind() == reflect.Func {
pc = value.Pointer()
} else if value.Kind() == reflect.Uintptr {
pc = v.(uintptr)
} else {
pc = invalidProgramCounters
}
return pc
}
// FuncInfo 获取函数信息
//
// v 接收func类型和uintptr
func FuncInfo(v any) (nameOfFunction, filename string, lineNumber int) {
pc := programCounters(v)
if pc == invalidProgramCounters {
return invalidFunctionName, unknownFilename, unknownLine
}
f := runtimeFunctionForPC(pc)
if f == nil {
return invalidFunctionName, unknownFilename, unknownLine
}
nameOfFunction = f.Name()
filename, lineNumber = f.FileLine(pc)
return
}
// FuncName 获取函数名
func FuncName(v any) (nameOfFunction string) {
pc := programCounters(v)
if pc == invalidProgramCounters {
return invalidFunctionName
}
f := runtimeFunctionForPC(pc)
if f == nil {
return invalidFunctionName
}
return f.Name()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。