如下所示:
func Caller(skip int) (pc uintptr, file string, line int, ok bool)
參數(shù):skip是要提升的堆棧幀數(shù),0-當(dāng)前函數(shù),1-上一層函數(shù),....
返回值:
pc是uintptr這個(gè)返回的是函數(shù)指針
file是函數(shù)所在文件名目錄
line所在行號(hào)
ok 是否可以獲取到信息
示例:
我們分別打印skip為0-3的相關(guān)信息
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() //獲取函數(shù)名
fmt.Println(fmt.Sprintf("%v %s %d %t %s",pc,file,line,ok,pcName))
}
結(jié)果:
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
分析結(jié)果可以看到
0-3分別上當(dāng)前函數(shù),當(dāng)前函數(shù)的上一個(gè)caller,....
補(bǔ)充:golang打印所有的runtime調(diào)用棧
我就廢話(huà)不多說(shuō)了,大家還是直接看代碼吧~
import "runtime"
buf := make([]byte, 1 20)
runtime.Stack(buf, true)
fmt.Printf("\n%s", buf)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- golang 定時(shí)任務(wù)方面time.Sleep和time.Tick的優(yōu)劣對(duì)比分析
- 解決Golang time.Parse和time.Format的時(shí)區(qū)問(wèn)題
- 解決golang時(shí)間字符串轉(zhuǎn)time.Time的坑
- golang的時(shí)區(qū)和神奇的time.Parse的使用方法
- Golang中的time.Duration類(lèi)型用法說(shuō)明
- golang time包做時(shí)間轉(zhuǎn)換操作
- golang xorm及time.Time自定義解決json日期格式的問(wèn)題
- golang time常用方法詳解