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