Files
goproxy/examples/plugin/example/client_example.go
DarkiT cc4c677553 增强插件系统:添加参数验证功能
- 在插件助手中新增 ValidateParams 函数,用于验证传入参数是否符合定义,确保参数的完整性和正确性。
- 更新 ExecuteAction 方法,集成参数验证逻辑,提升插件执行的安全性和可靠性。
- 示例程序中添加新的选项,展示如何生成插件API文档和OpenAPI/Swagger文档,增强用户体验。

此更新提升了插件系统的健壮性,便于开发者更好地管理和使用插件功能。
2025-03-14 13:32:36 +08:00

84 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package main
import (
"context"
"fmt"
"os"
"path/filepath"
"github.com/darkit/goproxy/examples/plugin"
)
// 展示客户端代码生成功能
func ClientGeneratorExample() {
// 创建上下文
ctx := context.Background()
// 获取插件目录
pluginsDir := filepath.Join("..", "plugins", "dist")
if _, err := os.Stat(pluginsDir); os.IsNotExist(err) {
fmt.Printf("插件目录不存在: %s\n", pluginsDir)
return
}
// 创建插件管理器
pm := plugin.NewPluginManager(pluginsDir)
// 加载插件
fmt.Println("正在加载插件...")
if err := pm.LoadPlugins(); err != nil {
fmt.Printf("加载插件失败: %v\n", err)
return
}
// 初始化所有插件
if err := pm.InitPlugins(ctx); err != nil {
fmt.Printf("初始化插件失败: %v\n", err)
return
}
// 启动所有插件
if err := pm.StartPlugins(ctx); err != nil {
fmt.Printf("启动插件失败: %v\n", err)
return
}
// 创建客户端代码输出目录
clientDir := "./client_code"
if err := os.MkdirAll(clientDir, 0755); err != nil {
fmt.Printf("创建客户端代码目录失败: %v\n", err)
return
}
fmt.Printf("将在 %s 目录生成客户端代码\n", clientDir)
// 创建客户端代码生成器
// 参数插件管理器、输出路径、模块名称、语言默认为go
clientGen := plugin.NewClientGenerator(pm, clientDir, "github.com/darkit/plugin-client", "go")
// 生成客户端代码
fmt.Println("正在生成客户端代码...")
if err := clientGen.GenerateAllClients(); err != nil {
fmt.Printf("生成客户端代码失败: %v\n", err)
} else {
fmt.Printf("成功生成客户端代码!代码位于: %s\n", clientDir)
fmt.Println("生成的代码包括:")
fmt.Println("- 基本客户端代码 (client/client.go)")
fmt.Println("- 模型定义 (client/pkg/models/models.go)")
fmt.Println("- 按插件类型生成的客户端 (client/pkg/<类型>/*.go)")
fmt.Println("- 示例代码 (client/example/main.go)")
fmt.Println("\n使用生成的客户端代码:")
fmt.Println("1. 将生成的代码复制到你的项目中")
fmt.Println("2. 调整模块名称以匹配你的项目")
fmt.Println("3. 根据示例代码创建客户端实例并调用方法")
}
// 停止所有插件
if err := pm.StopPlugins(ctx); err != nil {
fmt.Printf("停止插件失败: %v\n", err)
return
}
fmt.Println("\n示例结束")
}