如何在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}

輸出結果:日誌

相關文章
相關標籤/搜索