Go中如何获取函数名?
给定一个函数,是否可以获得它的名称?说:
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
我被告知 runtime.FuncForPC 会有帮助,但我不明白如何使用它。
Given a function, is it possible to get its name? Say:
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
I was told that runtime.FuncForPC would help, but I failed to understand how to use it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了一个解决方案:
I found a solution:
不完全是你想要的,因为它记录了文件名和行号,但这是我在 Tideland Common Go Library (http://tideland-cgl.googlecode.com/) 使用“runtime”包:
Not exactly what you want, because it logs the filename and the line number, but here is how I do it in my Tideland Common Go Library (http://tideland-cgl.googlecode.com/) using the "runtime" package:
我找到了一个更好的解决方案,在这个函数中,您只需传递一个函数,输出就会简单直接。
这是如何使用它的示例:
这是您应该期望的答案:
I found a better solution, in this function down here you just simply pass a function and the output is gonna be simple and straight.
And this is an example of how you use this:
And this is the answer you should expect:
通过获取前一个调用者的函数名称:
By getting the function name of the previous caller: