佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 對Golang中的runtime.Caller使用說明

對Golang中的runtime.Caller使用說明

熱門標簽:服務外包 百度競價排名 鐵路電話系統 網站排名優(yōu)化 AI電銷 地方門戶網站 Linux服務器 呼叫中心市場需求

如下所示:

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的優(yōu)劣對比分析
  • 解決Golang time.Parse和time.Format的時區(qū)問題
  • 解決golang時間字符串轉time.Time的坑
  • golang的時區(qū)和神奇的time.Parse的使用方法
  • Golang中的time.Duration類型用法說明
  • golang time包做時間轉換操作
  • golang xorm及time.Time自定義解決json日期格式的問題
  • golang time常用方法詳解

標簽:黃山 湘潭 湖南 衡水 仙桃 蘭州 崇左 銅川

巨人網絡通訊聲明:本文標題《對Golang中的runtime.Caller使用說明》,本文關鍵詞  ;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    虎林市| 永丰县| 深州市| 留坝县| 长治县| 吉木萨尔县| 永福县| 莆田市| 万安县| 凤城市| 平陆县| 宝鸡市| 台安县| 黄平县| 朔州市| 辰溪县| 射洪县| 二连浩特市| 武川县| 汉川市| 万山特区| 阆中市| 遵义市| 华亭县| 峨山| 灵台县| 翼城县| 遂昌县| 阜平县| 喀喇| 沁阳市| 林芝县| 两当县| 武宣县| 襄樊市| 东明县| 普兰店市| 资阳市| 舟曲县| 巴林左旗| 郴州市|