在Golang中获取func的名称
这个问题源之于群友SeanWu的一个提问
期望的效果
func ABC() {
}
func GetFuncName(fn func()) string {
return //返回ABC
}
stackoverflow上的方法
func GetFunctionName(i interface{}) string {
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}
分析
我曾经尝试这种写法
runtime.FuncForPC(reflect.ValueOf(i).Addr()).Name()
但func是不能执行Addr()的, 而
funcPc,_,_ := runtime.Caller(0)
runtime.FuncForPC(funcPc).Name()
只能在func被调用时才能获取到自身的名字
reflect.ValueOf(i).Pointer()
就是绕过了执行过程,直接通过PC值来获取Func对象,从而得到名字
blog comments powered by Disqus