Go语言获取当前函数名称和上一层调用者函数名称

  • 假设main函数调用CallTest1函数,CallTest1函数又调用Test1函数,Test1函数又调用getFunName函数,我们可以依次都获取出对应的函数名称
  • 我们可以称函数getFunName为当前函数
  • 然后称Test1函数为调用者函数
  • 反正都能获取出来了,要第几层的函数就都可获取了
package main

import (
   "fmt"
   "runtime"
   "strings"
)

func Test1() {
   getFunName(0)
   getFunName(1)
   getFunName(2)
   getFunName(3)
   getFunName(4)
   getFunName(5)
   getFunName(6)
   getFunName(7)
}
func CallTest1() {
   Test1()
}
func main() {
   CallTest1()
}

//获取第几层函数的名称
//1-当前层
//2-上一层
//3-再上一层
//4-再再上一层
func getFunName(l int) string {
   pc, _, _, _ := runtime.Caller(l)
   name := runtime.FuncForPC(pc).Name()
   split := strings.Split(name, ".")
   fmt.Printf("第%d层函数,函数名称是:%s\n", l, name)
   return split[len(split)-1]
}