plugin/

directory
v0.3.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 9, 2026 License: MIT

README

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"

Directories

Path Synopsis
Package main provides a pre-compiled Go plugin (.so) example.
Package main provides a pre-compiled Go plugin (.so) example.
Package main provides a source-type plugin example.
Package main provides a source-type plugin example.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL