• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    对Golang中的runtime.Caller使用说明

    如下所示:

    func Caller(skip int) (pc uintptr, file string, line int, ok bool)

    参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,....

    返回值:

    pc是uintptr这个返回的是函数指针

    file是函数所在文件名目录

    line所在行号

    ok 是否可以获取到信息

    示例:

    我们分别打印skip为0-3的相关信息

    package main 
    import (
     "fmt"
     "runtime"
    )
     
    func main() {
     for i := 0 ; i 4; i++ {
     test(i)
     }
    }
     
    func test(skip int) {
     call(skip)
    }
     
    func call(skip int) {
     pc,file,line,ok := runtime.Caller(skip)
     pcName := runtime.FuncForPC(pc).Name() //获取函数名
     fmt.Println(fmt.Sprintf("%v %s %d %t %s",pc,file,line,ok,pcName))
    }

    结果:

    4887700 D:/GoProject/src /test/test5.go 19 true main.call
    4887585 D:/GoProject/src/ test/test5.go 15 true main.test
    4887481 D:/GoProject/src /test/test5.go 10 true main.main
    4383501 C:/Go/src/runtime/proc.go 198 true runtime.main
    

    分析结果可以看到

    0-3分别上当前函数,当前函数的上一个caller,....

    补充:golang打印所有的runtime调用栈

    我就废话不多说了,大家还是直接看代码吧~

    import "runtime"
    buf := make([]byte, 1  20)
    runtime.Stack(buf, true)
    fmt.Printf("\n%s", buf)
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
    • 解决Golang time.Parse和time.Format的时区问题
    • 解决golang时间字符串转time.Time的坑
    • golang的时区和神奇的time.Parse的使用方法
    • Golang中的time.Duration类型用法说明
    • golang time包做时间转换操作
    • golang xorm及time.Time自定义解决json日期格式的问题
    • golang time常用方法详解
    上一篇:使用go的interface案例实现多态范式操作
    下一篇:Golang获取目录下的文件及目录信息操作
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    对Golang中的runtime.Caller使用说明 对,Golang,中的,runtime.Caller,