主要观点:许多语言支持元编程和代码生成,但在 Go 中较难,通过分享一个生成给定类型方法包装函数的程序,为 Go 代码生成提供起点。
关键信息:
- 可使用
golang.org/x/tools/go/packages
访问包元数据,go/types
访问类型元数据,github.com/dave/jennifer/jen
生成 Go 代码。 - 作者因重复写繁琐样板代码而决定写代码生成器,如在一个使用 SQLite3 数据库的守护程序中,为减少依赖注入而生成代理函数。
- 代码生成器步骤:加载包元数据获取给定类型的公共方法,生成函数包括处理导入,生成代码并保存为带有
_gen.go
后缀的文件。
重要细节: - 示例中生成了简单的
Hello
函数,实际代码生成器可根据//go:generate
命令运行,可获取文件名等参数。 - 生成函数时要处理公共方法,检查全局变量,处理参数和返回类型的导入等。
- 最后收集生成部分并保存为文件,可参考
gen-singleton-functions
仓库获取完整代码以用于自己的 Go 代码生成工具。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。