如何在Go的函数中获得调用者函数名?

有时候在Go的函数调用的过程当中,咱们须要知道函数被谁调用,好比打印日志信息等。例以下面的函数,咱们但愿在日志中打印出调用者的名字。函数

1func Foo() {
2 fmt.Println("谁在调用我?")
3 bar()
4}
5func Bar() {
6 fmt.Println("谁又在调用我?")
7}

首先打印函数自己的名称编码

最简单的方式就是硬编码。 由于在编译以前,咱们确定知道打印的时候所在哪一个函数,可是更好的方式是编写一个通用的函数,好比下面的例子:spa

1package main
2import (
"fmt"
"runtime"
5)
6func main() {
7 Foo()
8}
9func Foo() {
10 fmt.Printf("我是 %s, 谁在调用我?\n", printMyName())
11 Bar()
12}
13func Bar() {
14 fmt.Printf("我是 %s, 谁又在调用我?\n", printMyName())
15}
16func printMyName() string {
17 pc, _, _, _ := runtime.Caller(1)
18 return runtime.FuncForPC(pc).Name()
19}

输出结果:日志

相关文章
相关标签/搜索