V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kivmi  ›  全部回复第 1 页 / 共 4 页
回复总数  64
1  2  3  4  
其实 github.com/gookit/slog 中已经有了所有的信息,包括行信息,当然这种情况下,对于多个链路调用没那么友好,只能看到发生错误的地方,到底是哪个模块产生的错误,还是不是很清楚,因此可以打印整个的调用栈帧,如下:

func printCallers() {
var pcs [10]uintptr
n := runtime.Callers(2, pcs[:])
frames := runtime.CallersFrames(pcs[:n])
for {
frame, more := frames.Next()
fmt.Printf("Function: %s\nFile: %s\nLine: %d\n\n", frame.Function, frame.File, frame.Line)
if !more {
break
}
}
}

func ErrWrap(err error, message string) (e error) {
if err != nil {
slog.Info(message)
printCallers()
return err
}
return nil
}

这样既可以拿到对应的行,也可以看到整个的调用栈:

[2025/01/01T15:45:43.828] [application] [INFO] [main.go:30,ErrWrap] Json 解析错误

Function: main.ErrWrap
File: F:/workspace/go/errors-demo/main.go
Line: 31

Function: main.covert
File: F:/workspace/go/errors-demo/main.go
Line: 39

Function: main.main
File: F:/workspace/go/errors-demo/main.go
Line: 51

Function: runtime.main
File: C:/Program Files/Go/src/runtime/proc.go
Line: 250

Function: runtime.goexit
File: C:/Program Files/Go/src/runtime/asm_amd64.s
Line: 1594

Error: invalid character '>' looking for beginning of value
Result: map[]

Process finished with the exit code 0
func ErrWrap(err error, message string) (e error) {
if err != nil {
fmt.Println(fmt.Errorf("Error: %v\nStack trace:\n%s", err, debug.Stack()))
slog.Info(message)
return err
}
return nil
}

func covert(data string) (result map[string]interface{}, err error) {
e := json.Unmarshal([]byte(data), &result)
e = ErrWrap(e, "Json 解析错误")
return result, e
} 类似这样的,是否满足你的需求呢?
nas
说啥好呢?还是不说了吧.....OP ,加油!
3 天前
回复了 Ashe007 创建的主题 程序员 学习研究搭建 Kubernetes 的问题
@gdw1986 用 kubeadmin 就绕过了
3 天前
回复了 Ashe007 创建的主题 程序员 学习研究搭建 Kubernetes 的问题
@LokiSharp 自己玩 16G ,可以的
3 天前
回复了 Ashe007 创建的主题 程序员 学习研究搭建 Kubernetes 的问题
@kursk K8S 只是一个容器编排工具,管理 pod 和容器,当然会涉及网络,存储,服务暴露之类的东东。
3 天前
回复了 iamtuzi3333 创建的主题 程序员 大佬们,请教一下数据读取
从大数据处理基本都是 map-reduce ,所以,这么直接查询原始数据,总感觉有些不妥
3 天前
回复了 freesun165 创建的主题 git 求助 git 自动 merge 丢代码
太危险了,master -> branch , 相当于你对同一行的修改无效啊,各种冲突吧?可以从 master 同时 fork 几个分支?一个为开发分支,一个为上线分支?当需要上线时,合并到上线分支,然后合并到 master ,一直保持上线分支跟 master 保持一致,实现快速上线。貌似 git flow hotfix 也可以做到。
3 天前
回复了 ray2100 创建的主题 北京 程序员们一起跨年,一起玩
京西大悦城有跨年活动
39 天前
回复了 Joker123456789 创建的主题 Java 其实,我更喜欢写 SQL
直接存储过程走起
39 天前
回复了 li8888 创建的主题 程序员 新上一个工具站,求指点
@unclezs 系统卡顿引起的
39 天前
回复了 li8888 创建的主题 程序员 新上一个工具站,求指点
@unclezs 桌面快捷方式启动不了
39 天前
回复了 li8888 创建的主题 程序员 新上一个工具站,求指点
@unclezs 貌似是需要管理员安装
39 天前
回复了 li8888 创建的主题 程序员 新上一个工具站,求指点
@unclezs window11 都启动不了啊
@Belmode java 的生态学起来周期太长,而且面试很卷,前端快多了,至少前端其实可以接活干
70 天前
回复了 gransh 创建的主题 职场话题 年纪大又技术一般的人未来能做什么?
这个问题无解的。找到答案的也不会告诉你,告诉你的,你也不会接受。。。
感觉你转前端是不是比 java 强点? Java 真的很倦的
1  2  3  4  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5592 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 06:50 · PVG 14:50 · LAX 22:50 · JFK 01:50
Developed with CodeLauncher
♥ Do have faith in what you're doing.