DevGen Plugin Examples
中文 | English
本目录包含两种 plugin 类型的示例,用于验证它们的行为一致性。
Plugin 类型
| 类型 |
目录 |
说明 |
source |
plugin-source/ |
Go 源码,运行时编译 |
plugin |
plugin-goplugin/ |
预编译 Go plugin (.so) |
快速测试
cd examples/plugin-test
# 测试所有两种类型
./test-all.sh
分步测试
1. Source 类型 (运行时编译)
cd examples/plugin-test
# 使用 source 配置
cp devgen-source.toml devgen.toml
# 运行 (devgen 会自动编译 plugin-source)
devgen ./testdata
# 查看生成的文件
cat testdata/testdata_marked.go
2. Go Plugin 类型 (.so)
注意: Go plugin 仅支持 Linux 和 macOS
cd examples/plugin-test
# 先编译 .so 文件
go build -buildmode=plugin -o ../plugin-goplugin/goplugin.so ../plugin-goplugin
# 使用 plugin 配置
cp devgen-goplugin.toml devgen.toml
# 运行
devgen ./testdata
# 查看生成的文件
cat testdata/testdata_marked.go
预期输出
两种类型应该生成相同结构的文件 testdata/testdata_marked.go:
// Code generated by xxx. DO NOT EDIT.
package testdata
var MarkedTypes = []string{
"User",
"Order",
}
唯一的区别是注释中的 plugin 名称。
创建自己的 Plugin
Source 类型 (推荐)
最简单的方式,无需预编译:
// myplugin/myplugin.go
package main
import "github.com/tlipoca9/devgen/genkit"
type MyPlugin struct{}
func (m *MyPlugin) Name() string { return "myplugin" }
func (m *MyPlugin) Run(gen *genkit.Generator, log *genkit.Logger) error {
// 你的代码生成逻辑
return nil
}
var Tool genkit.Tool = &MyPlugin{}
func main() {}
配置 devgen.toml:
[[plugins]]
name = "myplugin"
path = "./myplugin"
type = "source"
Go Plugin 类型
适合需要最高性能的场景:
go build -buildmode=plugin -o myplugin.so ./myplugin
配置:
[[plugins]]
name = "myplugin"
path = "./myplugin.so"
type = "plugin"