對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的時區(qū)和神奇的time.Parse的使用方法
這篇文章主要介紹了golang的時區(qū)和神奇的time.Parse的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04

