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示例结束") }