golang获取调用者的方法名及所在源码行数

0
1250

代码:

package main

import “runtime”
import “log”

func main() {
test()
}

func test() {
test2()
}

func test2(){
pc,file,line,ok := runtime.Caller(2)
log.Println(pc)
log.Println(file)
log.Println(line)
log.Println(ok)
f := runtime.FuncForPC(pc)
log.Println(f.Name())

pc,file,line,ok = runtime.Caller(0)
log.Println(pc)
log.Println(file)
log.Println(line)
log.Println(ok)
f = runtime.FuncForPC(pc)
log.Println(f.Name())

pc,file,line,ok = runtime.Caller(1)
log.Println(pc)
log.Println(file)
log.Println(line)
log.Println(ok)
f = runtime.FuncForPC(pc)
log.Println(f.Name())
}
写了一个很简单的测试函数开始学习。一开始不是太懂他的参数的skip是什么意思,多看了下log的源码发现这个的意思是层级的意思。经过多次测试发现层级从0开始到3的时候结束。

结果一目了然,层次为0的时候返回我们调用runtime.Caller的地方.为1的时候就是我们调用call函数的地方。 2跟3已经是go源码的调用了应该是用不到。
 

回复

请输入你的评论!
请在这里输入您的名字