在 Go 里用 reflect 和 ast 实现动态特征


Go 让人吐槽的点之一就是动态特性低,比如不支持泛型、反射鸡肋等等。所以长期以来一直觉得搞一些动态功能是一件很酷的事情。

这里主要做了两件事:

  • 运行时获取变量名,并以此为基础做了一个调试工具 XGo/Dumper
  • 运行时获取函数签名,以此为基础做了个小类库,可以将任意函数暴露为 http 接口,同时还支持生成 swagger 文档。

中间主要用到了 ast 包的工具(因为想偷懒,也踩了不少坑)。基本思路都是通过 runtime 或 reflect 包,得到一些基本的信息,比如 fileline 和 pc,然后借此再拿到 ast,通过一些上下文信息来定位相关部分的代码,转换为需要的东西。

Avatar
huiren
Code Artisan

问渠那得清如许,为有源头活水来

相关

下一页
上一页
comments powered by Disqus