golang中如何获得函数的函数名

个00个 · · 13961 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

如何获取golang中的函数的名字, 这里需要用到反射. 可以看如下代码.

重点使用 runtime.FuncForPC 这个函数获取函数名.
使用strings.FieldsFunc 对得到的带 路径名和包名的 函数名进行必要的处理.

package main import ( "fmt" "reflect" "runtime" "strings" // "seps" "runtime/debug" ) func foo() { } func GetFunctionName(i interface{}, seps ...rune) string { // 获取函数名称 fn := runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() // 用 seps 进行分割 fields := strings.FieldsFunc(fn, func(sep rune) bool { for _, s := range seps { if sep == s { return true } } return false }) // fmt.Println(fields) if size := len(fields); size > 0 { return fields[size-1] } return "" } func main() { // This will print "name: main.foo" fmt.Println("name:", GetFunctionName(foo)) // runtime/debug.FreeOSMemory fmt.Println(GetFunctionName(debug.FreeOSMemory)) // FreeOSMemory fmt.Println(GetFunctionName(debug.FreeOSMemory, '.')) // FreeOSMemory fmt.Println(GetFunctionName(debug.FreeOSMemory, '/', '.')) } 

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:个00个

查看原文:golang中如何获得函数的函数名

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

13961 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传