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

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang 有没有更动态化,更强大的反射?
未分類
27 6 月 2020

golang 有没有更动态化,更强大的反射?

golang 有没有更动态化,更强大的反射?

資深大佬 : DavidNineRoc 7

RT, 比如我有一个文件夹 /commands 里面有一堆工具脚本, 我怎么可以动态来调用?

实际效果

通过cli调用,输入/commands里结构体的名字,可以动态调用这个结构体的方法

  • 想通过动态import然后init调用,语法直接不支持
  • commands每一个结构体实现接口, 最后通过接口去调用, 谁知 golang 居然不支持字符串的反射,说实话有点鸡肋了.

搜了一下帖子,说是在外部注册一个全局 map 类,不过这样做还是有缺陷不是我想要的那种.

有写过类似服务的大神, 指点两招

大佬有話說 (8)

  • 資深大佬 : virusdefender

    既然 golang 了,就别考虑这种问题了,还有两个办法

    1. 每个 command 中的 init 中自己去修改注册的 map,而不是在一个地方引用所有的 command
    2. go generate 写个脚本扫描一下,然后生成一个 go 文件

  • 主 資深大佬 : DavidNineRoc

    @virusdefender 如果注册的 command 和要运行的不在同一个项目该怎么处理.
    如果有一个服务 a, 类似 gofmt, 然后需要调用 command 里的所有命令.

    方法 2 破坏代码管理,生成新的东西.

  • 資深大佬 : SingeeKing

    编译型语言都不行吧,除非内置一个编译器在运行时编译;一个可行的思路是把每个 /commands 文件分开编译成动态链接库,然后调用这些编译好的 dll 或者 so 文件是可以的

  • 資深大佬 : dcalsky

    用 rpc 通信即可。

  • 資深大佬 : ihidchaos

    MethodByName 这样子反射呢
    https://www.cnblogs.com/52php/p/6337420.html

  • 主 資深大佬 : DavidNineRoc

    @SingeeKing 编译语言会所有函数加载到一个函数表吗?然后靠函数的名字调用不.
    @dcalsky 限制了用户类型,想做一个工具类的东西
    @ihidchaos 不足,都实例化了那个结构体, 要是实例化的结构体, golang 内置的反射够调用方法了, 现在是实例化不了结构体

  • 資深大佬 : locoz

    工具脚本?都是 Go 写的?你想的是那个文件夹下放的都是.go 文件,然后用一个编译好的 go 程序去动态地调用?还是说文件夹里是一堆编译好的 Go 程序?

  • 主 資深大佬 : DavidNineRoc

    @locoz 用 golang 写一个工具,编译好的放入 go bin 目录. 然后去调用其它项目里的 commands 文件夹下的 .go 文件

文章導覽

上一篇文章
下一篇文章

AD

其他操作

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

51la

4563博客

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