目录

  • 函数:
  • 参数解释:
  • 例子:

函数:

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
Caller()报告当前go程调用栈所执行的函数的文件和行号信息。

参数解释:

  • skip
    上溯的栈帧数,0表示Caller的调用者(Caller所在的调用栈)(0-当前函数,1-上一层函数,…)。
  • pc
    调用栈标识符
  • file:
    文件路径
  • line:
    该调用在文件中的行号
  • ok:
    如果无法获得信息,ok会被设为false

例子:

可能看了上面的解释,对于skip参数依然很迷惑,那我们来看个例子:

此时的项目目录结构:

 blog/├── conf /...├── main.go├── middleware /...├── models /...├── pkg│     ├── e /...│     ├── logging│    │   ├── file.go│    │   └── log.go│     ├── setting /...│   └── util /...├── routers│   ├── api│    │   ├── auth.go│    │   └── v1│     │       ├── article.go│     │       └── tag.go│     └── router.go├── runtime

就拿 blog/routers/api/v1/article.go当例子,在这个文件中GetArticle()中用到了logging.Info():

// followJianYuStudyGo/routers/api/v1/article.go
func GetArticle(c *gin.Context) {...} else {for _, err := range valid.Errors {logging.Info(err.Key, err.Message) // article.go:122  上溯栈帧数skip = 2}}...
}// followJianYuStudyGo/pkg/logging/log.go
func Info(v ...interface{}) {setPrefix(INFO) // log.go:67 上溯栈帧数skip = 1logger.Println(v)
}func setPrefix(level Level) {_, file, line, ok := runtime.Caller(DefaultCallerDepth) // log.go:50 上溯栈帧数skip = 0....
}

如果我们的skip

  • 为0:
    代表上溯的栈帧数为0,返回的file就是调用Caller()的位置:

    [INFO][log.go:50]2022/04/29 21:07:11 [created_by 创建人不可以为空]
    
  • 为1:
    代表上溯的栈帧数为1,返回的file就是调用Caller()的上一层位置:

    [INFO][log.go:67]2022/04/29 21:25:57 [state 状态只允许为0或1]
    
  • 为2:
    代表上溯的栈帧数为2,返回的file就是调用Caller()的上一层的上一层位置:

    [INFO][article.go:122]2022/04/29 20:52:23 [state 状态只允许为0或1]
    

重点:
 因为我们在logging包里的log.go文件封装了Info()、Debug()、Warn()、....函数,其他地方调用的都是这种封装好的函数,所以如果我们打印日志的时候,想要获取使用了logging.Info()的位置,runtime.Caller(skip int)的skip是要设置为2的(原因见skip=2的部分)!!!!

Go学习——runtime.Caller()函数相关推荐

  1. golang runtime.Caller 学习笔记

    runtime.Caller runtime.Caller可以获取到调用时的代码文件路径.行数等信息,在打印日志时常常使用 runtime.Caller源码 // Caller reports fil ...

  2. Go 学习笔记(22)— 并发(01)[进程、线程、协程、并发和并行、goroutine 启动、goroutine 特点,runtime 包函数]

    Go 语言通过编译器运行时( runtime ),从语言上支持了并发的特性. 虽然 Go 程序编译后生成的是本地可执行代码,但是这些可执行代码必须运行在Go 语言的运行时(Runtime )中.Go ...

  3. runtime Caller 方法再封装

    在 Go单元测试--资源初始化 里获取配置文件的绝对路径时,提到了 Caller 方法.这个方法在日志打印的包中特别常见. 日志文件中记录的文件路径和行号,就是这个函数的返回值. pc, file, ...

  4. Golang中的runtime.Caller理解

    func Caller(skip int) (pc uintptr, file string, line int, ok bool) 参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,. ...

  5. PostgreSQL学习手册(五) 函数和操作符

    PostgreSQL学习手册(五) 函数和操作符 一.逻辑操作符:     常用的逻辑操作符有:AND.OR和NOT.其语义与其它编程语言中的逻辑操作符完全相同. 二.比较操作符:     下面是Po ...

  6. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  7. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数

    [标签] excel函数.统计函数 前面我们学习了COUNT函数,我们回顾一下: count函数很简单,就是统计一个或多个区域的数字个数.相对来说,countif函数多了一个if,也就是可以增加条件了 ...

  8. 学习Kotlin(五)函数与Lambda表达式

    推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...

  9. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略

    Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介.使用方法.经典案例之详细攻略 目录 *args和**kwargs(设计不同数量的参数函数)的简介 1 ...

最新文章

  1. MapReduce Job集群提交过程源码跟踪及分析
  2. stl min函数_std :: min()函数以及C ++ STL中的示例
  3. mysql5.6 慢查询_MySQL5.6 如何优化慢查询的SQL语句
  4. Riot Blockchain再次购入1.5万台比特大陆S19系列矿机
  5. 太赫兹芯片是什么原理_太赫兹微芯片速度可提升100倍 却遭遇研发两大挑战
  6. 前端构建工具与应用程序测试
  7. (转)以太坊(Ethereum)全零地址(0x000000...)揭秘
  8. EfficientDeRainy:一种高效的图像去雨雾算法
  9. 千帆竞发百日角逐,玻色量子荣获“创业北京”一等奖
  10. 【高中必修二】几何体
  11. 论企业组织架构的扁平化管理
  12. 开源程序LAN_share 单例模式巧用
  13. python实训总结万能版3000字_万能实习报告论文范文3000字
  14. 智融SW6206、SW3516、SW3522、SW2303等快充市场方案应用
  15. 上皮细胞膜纳米囊泡包裹药物如紫杉醇,喜树碱,阿霉素
  16. 软件测试工程师Linux笔试题及答案(三)
  17. sakai上传大文件失败解决方案
  18. python分析微博数据中心_未明学院:量化金融项目实战,成为掌握数据分析技能的复合型人才!...
  19. 基于i.MX8M处理器MYC-JX8MX核心板
  20. 使用idea创建servlet程序(idea:2021.2)

热门文章

  1. [论文笔记]Arbitrary-Oriented Scene Text Detection via Rotation Proposals
  2. 【ESP 保姆级教程】疯狂Node.js服务器篇 ——案例:ESP8266 + MQ3酒精传感器 + NodeJs本地服务 + 文件存储数据
  3. EC esayClick 自定义浮窗
  4. Poi 4.0设置自定义背景颜色
  5. linux篇之安装MySQL及远程连接
  6. 电子计算机里CE,电子计算机上的ce表示什么意思
  7. 首届华为开发者大赛沙龙牵手大连-与开发者共话赛事
  8. FQQ兵法,适用于各种版本以及种族
  9. 【数学建模】12 线性规划模型的求解方法
  10. 电力行业DC-DC电源模块的选型