当前位置: 首页 > 面试题库 >

如何在Go中获取函数名称?

龚鸿雪
2023-03-14
问题内容

给定一个函数,可以得到它的名字吗?说:

func foo() {
}

func GetFunctionName(i interface{}) string {
    // ...
}

func main() {
    // Will print "name: foo"
    fmt.Println("name:", GetFunctionName(foo))
}

有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。


问题答案:

很抱歉回答我自己的问题,但我找到了解决方案:

package main

import (
    "fmt"
    "reflect"
    "runtime"
)

func foo() {
}

func GetFunctionName(i interface{}) string {
    return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

func main() {
    // This will print "name: main.foo"
    fmt.Println("name:", GetFunctionName(foo))
}


 类似资料:
  • 本文向大家介绍Python如何获取函数名称?,包括了Python如何获取函数名称?的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将学习如何在Python中获取函数名称。获得任何函数的名称都是一件简单的事情。对于Python2和Python3,我们有两种不同的方式。让我们看看他们两个。 Python2 Python2中的每个函数都有一个名为func_name的属性,该属性为您提供当前函数

  • 问题内容: 有没有办法在运行时获取当前包的名称? …且结果应为“主要” 现在我正在使用常量,例如: 但我很好奇您能否避免这种情况 问题答案: 没有提供所需功能的运行时或反射方法或函数。 我能找到的最接近的东西是: 这将输出: 您还可以读取文件的第一行并删除“ package”子字符串。(不确定这是最好的主意)

  • 问题内容: 出于跟踪目的,我想打印出当前函数名称,例如gcc中的宏。 这样当我有一个功能 它会自动打印出来或类似的东西。 问题答案: [注意:Go 1.7+建议使用代替; 包运行时是您的朋友在这里:

  • 在我的vim配置中,我映射了,以运行phpunit测试。 但有时我想使用phpunit——filter来运行特定的测试 我们是否可以在vim中自动填写函数名?

  • 问题内容: 要修复测试用例,我需要确定是否从特定的调用程序函数中调用了该函数。我负担不起添加布尔值参数,因为它会破坏定义的接口。怎么办呢? 这是我想要实现的。在这里,我无法更改operation()的参数,因为它是接口实现。 问题答案: 你可以试试

  • 问题内容: 我有一个函数A调用函数B,该函数有时会基于无效数据来调用恐慌。在函数A的延迟函数中,我想知道传递给panic()的消息函数B,以便可以通过网络将json中的错误报告给客户端。 例如 函数B使用恐慌的原因是为了避免大量的 在函数A中,并使代码更易于阅读和维护。 问题答案: 例如: 操场 输出: