如何在Go的函数中得到调用者函数名?
有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。
1func Foo() {
2 fmt.Println("谁在调用我?")
3 bar()
4}
5func Bar() {
6 fmt.Println("谁又在调用我?")
7}
最简单的方式就是硬编码。 因为在编译之前,我们肯定知道打印的时候所在哪个函数,但是更好的方式是编写一个通用的函数,比如下面的例子:
1package main
2import (
3"fmt"
4"runtime"
5)
6func main() {
7 Foo()
8}
9func Foo() {
10 fmt.Printf("我是 %s, 谁在调用我?\n", printMyName())
11 Bar()
12}
13