go语言runtime_中台怎么理解

go语言runtime_中台怎么理解funcCaller(skipint)(pcuintptr,filestring,lineint,okbool)参数:skip是要提升的堆栈帧数,0-当前函数,1-上一层函数,….返回值:pc是uintptr这个返回的是函数指针file是函数所在文件名目录line所在行号ok是否可…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

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

Jetbrains全家桶1年46,售后保障稳定

   参数: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,….

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210046.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 反射getmethod参数_java通过反射获取属性值

    反射getmethod参数_java通过反射获取属性值1、forName方法forName是一个静态方法,其作用:通过调用来获取类名对应的Class对象,同时将Class对象加载进来。如果将类名保存在字符串(如xml)中,就可以在程序运行时,动态调用加载。注意:只有调用的参数是类名或者方法时,才可用。2、newInstance()方法作用:将对象实例化。返回类型为Object。与new的区别在于,new可以带参,而newInstance()不可以,…

    2022年9月2日
    2
  • 整型与字符串转换

    整型与字符串转换我们写程序的时候经常会遇到整型和字符串相互转换的问题,这里要用到几个函数,itoa(),atoi(),sprintf()下面来介绍下这几个函数的具体用法!itoa功能:把一整数转换为字符串用

    2022年7月2日
    26
  • elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)

    2022年4月3日
    113
  • 静态变量与动态变量

    静态变量与动态变量0.静态存储与动态存储1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期4)静态存储只会初始化一次 摘自于:百度百科…

    2022年5月25日
    29
  • Werkzeug库[通俗易懂]

    Werkzeug库[通俗易懂]简介Werkzeug是一个Python写成的WSGI工具集。它遵循WSGI规范,对服务器和Web应用之间的“中间层”进行了开发,衍生出一系列非常有用的Web服务底层模块。关于Werkzeug功能的最简单的一个例子如下:12345678910fromwerkzeug.wrappersimportRequest,…

    2022年9月27日
    0
  • 代码注册广播需要调用registerReceiver()方法_怎么把程序注册成服务

    代码注册广播需要调用registerReceiver()方法_怎么把程序注册成服务分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&

    2022年9月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号