34 lines
938 B
Go
34 lines
938 B
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"runtime"
|
||
)
|
||
|
||
func f() {
|
||
pc, fine, line, ok := runtime.Caller(2)
|
||
if !ok {
|
||
fmt.Printf("runtime.Caller() failed\n")
|
||
return
|
||
}
|
||
funcName := runtime.FuncForPC(pc).Name() //这里拿到的应该是main.main函数,如果需要拿到f()那么这里传递的应该是Caller(0)
|
||
fmt.Println(funcName)
|
||
fmt.Println(fine) // runtime_demo/main.go
|
||
fmt.Println(line) // 12,是去找这个runtime.caller所执行的行数
|
||
}
|
||
|
||
func f1() {
|
||
f()
|
||
}
|
||
func main() {
|
||
f1() //注意这里的f1()套了一层,所以应该传2
|
||
// pc, fine, line, ok := runtime.Caller(0) //注意这里传0是当前main函数里面执行的package,那比如说上面有个f1()函数,这里的Caller就需要传到1
|
||
// if !ok {
|
||
// fmt.Printf("runtime.Caller() failed\n")
|
||
// return
|
||
// }
|
||
// fmt.Println(pc)
|
||
// fmt.Println(fine) // runtime_demo/main.go
|
||
// fmt.Println(line) // 12,是去找这个runtime.caller所执行的行数
|
||
}
|