在runtime包的过程中看到 getcallerpc 的函数声明,但是没看到该函数的实现。
这样就让我们来简单实现下这个函数吧:
// main.go
package main
import (
"fmt"
"runtime"
)
func main() {
f()
}
//go:noinline
func f() {
pc := getcallerpc()
file, n := runtime.FuncForPC(pc).FileLine(pc)
fmt.Println(file, n)
}
func getcallerpc() uintptr
汇编代码
//main.s
#include "textflag.h"
TEXT ·getcallerpc(SB), NOSPLIT, $0-8
MOVQ BP, AX
MOVQ 8(AX), AX
MOVQ AX, ret+0(FP)
RET
执行会打印 f() 代码所在位置的下一行。./main.go 11