登录
首页 >  Golang >  Go问答

查找 golang 中装饰函数的名字

来源:stackoverflow

时间:2024-02-14 20:18:16 473浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《查找 golang 中装饰函数的名字》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在尝试在调用之前和之后记录装饰函数名称,如下所示。

是否可以在decorator中获取修饰函数名称f1,使其显示entering f1leaving 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
``

本篇关于《查找 golang 中装饰函数的名字》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>