跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请问 go 的反射 是不是必须要先有一个明确的结构体?
未分類
4 3 月 2022

请问 go 的反射 是不是必须要先有一个明确的结构体?

请问 go 的反射 是不是必须要先有一个明确的结构体?

資深大佬 : Joker123456789 24

今天看到 go 反射的时候,发现 所有的例子都是这样的

首先要有一个结构体

type  Demo struts {  }  func (demo Demo) CallFuncNoArgs (){  } 

然后才可以用反射

var demo= &Demo {}  reflect.ValueOf(demo).MethodByName("CallFuncNoArgs").Call([]reflect.Value{}) 

发现这样限制非常大,如果 我想用反射 调用任意函数,怎么办? 比如

有这样一个字符串

var fucnName = "api.getList" 

api 是 包名,getList 是函数名

这种情况,我想通过这个字符串 执行对应的函数,该怎么操作?

大佬有話說 (8)

  • 資深大佬 : sun522198558

    “`go
    registry := map[string]func() interface{}{
    “Demo”: func() interface{} { return Demo{} },
    }
    reflect.ValueOf(registry[“Demo”]()).MethodByName(“CallFuncNoArgs”).Call(nil)
    “`

  • 主 資深大佬 : Joker123456789

    @sun522198558
    非常感谢你的解答,
    但是我看了一下,发现这种方式 只是把 [var demo= &Demo {}] 这句复杂化了一下,我是直接定义的,你是定义后放入 map ,然后从 map 取,没有从根本上解决问题。
    不过我还是非常感谢你,谢谢。

  • 資深大佬 : keepeye

    go 并没有内置存储包、函数的全局 map ,你必须自己定义一个 map ,把你那些函数都存到 map 里面再配合 reflect 调用。。

  • 主 資深大佬 : Joker123456789

    @keepeye 额,好吧,谢谢

  • 資深大佬 : bankroft

    考虑一下用 plugin

  • 資深大佬 : fgwmlhdkkkw

    go 编译完是 exe ,不能动态加载 class……

  • 資深大佬 : Buges

    go 的运行时没有元数据。
    你说的那种字符串动态调用得有元数据才能实现,一般这样的语言( Java 、c#等)非常容易反编译就是因为元数据的原因。

  • 資深大佬 : liuhan907

    @Buges Go 有元数据,只是不公开给开发者而已。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具