#独家
golang 的 logger 的 Output calldepth 参数作用?

2023-08-02 0 1,699

文档中 calldepth 的解释太简洁了,

其中 calldepth 是用来做什么,在 什么场景下有起作用

calldepth,顾名思义就是“调用深度”。

首先你要知道什么是“函数栈”。

假设有这样的函数间关系 A → B → C... 函数 A 调用了函数 B,函数 B 又调用了函数 C,依次类推……那么在函数 C 内部想要知道到底是谁调用的它(也就是 A),那么就得在栈上往上找 2 层。

log 模块的函数栈是 log.Printf → std.Output → runtime.Caller 这样的,所以默认值是 2,就是从 runtime.Caller 往上找 2 层,就能知道 log.Printf 是从哪来的了。

为啥要往上找?因为你这是日志模块,你肯定需要知道最终打 log 的那个最上层的调用方到底是谁(就是谁执行了 log.Printf 这行代码),这样才能再日志里输出出来的文件、行号等堆栈信息。

如果你不是直接用的 log 模块,而是自己又封装了一层,那 calldepth 就得传 3 了。因为还传 2 只能定位到你封装的那层上,定位不到实际打 log 的那层。

依次类推,你每多封装一层,celldepth 就 +1。


至于注释里的 PC,是 Program Counter(程序计数器)的缩写。

这个需要了解一点计算机组成原理的相关知识。你就知道它实际代表 CPU 当前指令地址就可以了。所谓 “恢复 PC” 就是指定位到当前执行的那句代码上。这个前面已经提到过了。回复1 个回答被忽略

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 golang 的 logger 的 Output calldepth 参数作用? https://www.jkxiazai.com/2351.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务