runtime.Caller怎么在Golang中使用-创新互联
runtime.Caller怎么在Golang中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
成都创新互联公司从2013年创立,先为元氏等服务建站,元氏等地企业,进行企业商务咨询服务。为元氏企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。如下所示:
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)
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。
文章标题:runtime.Caller怎么在Golang中使用-创新互联
URL链接:http://hbruida.cn/article/hjepe.html