runtime.Caller

函数签名:

func Caller(skip int) (pc uintptr, file string, line int, ok bool)
CallerskipCallerCaller

根据pc获取函数名

pc
func FuncForPC(pc uintptr) *Func

func (*Func) Name
FuncForPCpc*FuncnilName

实例

package main

import (
	"fmt"
	"path"
	"runtime"
)

func getInfo(skip int) (funcName, fileName string, lineNo int) {
	pc, file, lineNo, ok := runtime.Caller(skip)
	if !ok {
		fmt.Println("runtime.Caller() failed")
		return
	}
	funcName = runtime.FuncForPC(pc).Name()
	fileName = path.Base(file) // Base函数返回路径的最后一个元素
	return
}

func main() {
	fmt.Println(getInfo(0))
	fmt.Println(getInfo(1))
}

输出:

main.getInfo main.go 10
main.main main.go 22

函数签名和函数作用均来自Go语言标准库文档中文版