Ai
2 Star 2 Fork 9

王布衣/gox

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
stdlib.go 1.38 KB
一键复制 编辑 原始数据 按行查看 历史
王布衣 提交于 2025-02-15 16:10 +08:00 . 更新以支持go1.24
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)
}
// 获取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 := runtime.FuncForPC(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 := runtime.FuncForPC(pc)
if f == nil {
return invalidFunctionName
}
return f.Name()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/quant1x/gox.git
git@gitee.com:quant1x/gox.git
quant1x
gox
gox
v1.22.12

搜索帮助