对Golang中的runtime.Caller使用说明

 更新时间:2020年12月23日 16:38:00   作者:思维的深度  
这篇文章主要介绍了对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使用sort接口实现排序示例

    golang使用sort接口实现排序示例

    这篇文章主要介绍了golang使用sort接口实现排序的方法,简单分析了sort接口的功能并实例演示了基于sort接口的排序实现方法,需要的朋友可以参考下
    2016-07-07
  • golang post请求常用的几种方式小结

    golang post请求常用的几种方式小结

    这篇文章主要介绍了golang post请求常用的几种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang中两个协程交替打印数字和字母的实现

    golang中两个协程交替打印数字和字母的实现

    这篇文章给大家介绍了golang中两个协程交替打印数字和字母的实现,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • 使用Go语言编写简洁代码的最佳实践

    使用Go语言编写简洁代码的最佳实践

    简洁的代码对于创建可维护、可阅读和高效的软件至关重要,Go 是一种强调简单和代码整洁的语言,在本文中,我们将结合代码示例,探讨编写简洁 Go 代码的最佳实践,需要的朋友可以参考下
    2023-09-09
  • golang的时区和神奇的time.Parse的使用方法

    golang的时区和神奇的time.Parse的使用方法

    这篇文章主要介绍了golang的时区和神奇的time.Parse的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 轻松入门:使用Golang开发跨平台GUI应用

    轻松入门:使用Golang开发跨平台GUI应用

    Golang是一种强大的编程语言,它的并发性和高性能使其成为开发GUI桌面应用的理想选择,Golang提供了丰富的标准库和第三方库,可以轻松地创建跨平台的GUI应用程序,通过使用Golang的GUI库,开发人员可以快速构建具有丰富用户界面和交互功能的应用程序,需要的朋友可以参考下
    2023-10-10
  • 解决golang.org不能访问的问题(推荐)

    解决golang.org不能访问的问题(推荐)

    这篇文章主要介绍了解决golang.org不能访问的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • go实现thrift的网络传输性能及需要注意问题示例解析

    go实现thrift的网络传输性能及需要注意问题示例解析

    这篇文章主要为大家介绍了go实现thrift的网络传输性能及需要注意问题示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • go并发利器sync.Once使用示例详解

    go并发利器sync.Once使用示例详解

    这篇文章主要为大家介绍了go并发利器sync.Once使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • golang 通用Contains方法分享

    golang 通用Contains方法分享

    这篇文章主要介绍了golang 通用Contains方法分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论