runtime.Caller()

1 这个函数主要是为了查看函数调用栈的问题,

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) {
    // skip为0的时候表示当前所在的函数,即栈顶,1是从栈顶往下数第二个,以此类推,
    // line为执行了所在函数内的哪一行,
    // file为函数所在的文件名,
    // pc是所在函数的指针,
    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))
}
//17466820   /Users/hanhua/go/src/go_learn/main.go   16   true   main.call
//17466704   /Users/hanhua/go/src/go_learn/main.go   12   true   main.test
//17466695   /Users/hanhua/go/src/go_learn/main.go   8   true   main.main
//16990216   /usr/local/Cellar/go/1.15.2/libexec/src/runtime/proc.go   204   true   runtime.main

参考:https://blog.csdn.net/skh2015java/article/details/100042494

原文地址:https://www.cnblogs.com/xxswkl/p/13938623.html