如下所示:

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,runtime.Caller

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“对Golang中的runtime.Caller使用说明”
暂无“对Golang中的runtime.Caller使用说明”评论...

P70系列延期,华为新旗舰将在下月发布

3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。

而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?

根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。