Go的函数中得到调用者函数名

原地址是这里,我摘抄一部份.https://colobu.com/2018/11/03/get-function-name-in-go/

"有时候在Go的函数调用的过程中,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志中打印出调用者的名字。"

其实我可能的应用是根据调用的函数名来导向不同的逻辑.

package main
import (
	"fmt"
	"runtime"
)
func main() {
	Foo()
}
func Foo() {
	fmt.Printf("我是 %s, %s 在调用我!\n", printMyName(), printCallerName())
	Bar()
}
func Bar() {
	fmt.Printf("我是 %s, %s 又在调用我!\n", printMyName(), printCallerName())
}
func printMyName() string {
	pc, _, _, _ := runtime.Caller(1)
	return runtime.FuncForPC(pc).Name()
}
func printCallerName() string {
	pc, _, _, _ := runtime.Caller(2)
	return runtime.FuncForPC(pc).Name()
}

可以通过runtime.Caller、runtime.Callers、runtime.FuncForPC等函数更详细的跟踪函数的调用堆栈.

不过暂时用不上,所以就不转后面部份了.有兴趣的看原地址.

相关文章