如何解决在 golang 中获取修饰的函数名
是否可以在 f1
中获取修饰函数名称 decorator
以使其显示 entering f1
和 leaving f1
。
package main
import (
"fmt"
)
func f1() {
fmt.Println("f1")
}
func decorator(f func()) {
fmt.Println("entering f.name")
f()
fmt.Println("leaving f.name")
}
func main() {
decorator(f1)
}
解决方法
您可以为此使用反射和运行时包
package main
import (
"fmt"
"reflect"
"runtime"
)
func f1() {
fmt.Println("f1")
}
func decorator(f func()) {
name := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()
fmt.Printf("entering f.name:%s\n",name)
f()
fmt.Printf("leaving f.name:%s\n",name)
}
func main() {
decorator(f1)
}
entering f.name:main.f1
f1
leaving f.name:main.f1
``
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。