From 77b0eccf4cfe67959f6165ed82fa1342ac1493df Mon Sep 17 00:00:00 2001 From: xfy Date: Thu, 2 Apr 2026 14:12:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app):=20=E5=B0=86=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E6=8A=BD=E5=8F=96=E5=88=B0=20internal/app=20?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将版本信息和核心运行逻辑从 main.go 移至 internal/app/app.go, main.go 仅保留 CLI 参数解析和入口调用。 Co-Authored-By: Claude --- Makefile | 12 +++---- internal/app/app.go | 79 ++++++++++++++++++++++++++++++++++++++++++++ main.go | 80 +++++---------------------------------------- 3 files changed, 93 insertions(+), 78 deletions(-) create mode 100644 internal/app/app.go diff --git a/Makefile b/Makefile index 3421c76..9889632 100644 --- a/Makefile +++ b/Makefile @@ -12,12 +12,12 @@ BUILD_DIR := bin # 生产构建标志 LDFLAGS := -ldflags "-s -w \ - -X 'main.version=$(VERSION)' \ - -X 'main.gitCommit=$(GIT_COMMIT)' \ - -X 'main.gitBranch=$(GIT_BRANCH)' \ - -X 'main.buildTime=$(BUILD_TIME)' \ - -X 'main.goVersion=$(GO_VERSION)' \ - -X 'main.buildPlatform=$(BUILD_PLATFORM)'" + -X 'rua.plus/lolly/internal/app.Version=$(VERSION)' \ + -X 'rua.plus/lolly/internal/app.GitCommit=$(GIT_COMMIT)' \ + -X 'rua.plus/lolly/internal/app.GitBranch=$(GIT_BRANCH)' \ + -X 'rua.plus/lolly/internal/app.BuildTime=$(BUILD_TIME)' \ + -X 'rua.plus/lolly/internal/app.GoVersion=$(GO_VERSION)' \ + -X 'rua.plus/lolly/internal/app.BuildPlatform=$(BUILD_PLATFORM)'" # Go 文件 MAIN_PATH := main.go diff --git a/internal/app/app.go b/internal/app/app.go new file mode 100644 index 0000000..a9bc104 --- /dev/null +++ b/internal/app/app.go @@ -0,0 +1,79 @@ +// Package app 提供应用程序的启动和运行逻辑。 +package app + +import ( + "fmt" + "os" + + "rua.plus/lolly/internal/config" +) + +// 版本信息,通过 -ldflags 注入。 +var ( + Version = "dev" + GitCommit = "unknown" + GitBranch = "unknown" + BuildTime = "unknown" + GoVersion = "unknown" + BuildPlatform = "unknown" +) + +// Run 应用程序入口。 +func Run(cfgPath string, genConfig bool, outputPath string, showVersion bool) int { + if genConfig { + return generateConfig(outputPath) + } + + if showVersion { + printVersion() + return 0 + } + + return startServer(cfgPath) +} + +// generateConfig 生成默认配置文件。 +func generateConfig(outputPath string) int { + cfg := config.DefaultConfig() + yamlData, err := config.GenerateConfigYAML(cfg) + if err != nil { + fmt.Fprintf(os.Stderr, "生成配置失败: %v\n", err) + return 1 + } + + if outputPath == "" { + fmt.Print(string(yamlData)) + } else { + if err := os.WriteFile(outputPath, yamlData, 0644); err != nil { + fmt.Fprintf(os.Stderr, "写入文件失败: %v\n", err) + return 1 + } + fmt.Printf("配置已写入: %s\n", outputPath) + } + return 0 +} + +// printVersion 打印版本信息。 +func printVersion() { + fmt.Printf("lolly version %s\n", Version) + fmt.Printf(" Git: %s (%s)\n", GitCommit, GitBranch) + fmt.Printf(" Built: %s\n", BuildTime) + fmt.Printf(" Go: %s\n", GoVersion) + fmt.Printf(" Platform: %s\n", BuildPlatform) +} + +// startServer 启动服务器。 +func startServer(cfgPath string) int { + cfg, err := config.Load(cfgPath) + if err != nil { + fmt.Fprintf(os.Stderr, "加载配置失败: %v\n", err) + return 1 + } + + fmt.Printf("配置加载成功: %s\n", cfgPath) + fmt.Printf("监听地址: %s\n", cfg.Server.Listen) + + // TODO: 启动服务器 + fmt.Println("服务器启动中...") + return 0 +} \ No newline at end of file diff --git a/main.go b/main.go index e2a0e3d..d3efad1 100644 --- a/main.go +++ b/main.go @@ -2,89 +2,25 @@ package main import ( "flag" - "fmt" "os" - "rua.plus/lolly/internal/config" -) - -// 通过 -ldflags 注入的版本信息 -var ( - version = "dev" - gitCommit = "unknown" - gitBranch = "unknown" - buildTime = "unknown" - goVersion = "unknown" - buildPlatform = "unknown" -) - -// CLI 参数 -var ( - cfgPath = flag.String("c", "lolly.yaml", "配置文件路径") - cfgPathLong = flag.String("config", "", "配置文件路径(长参数)") - genConfig = flag.Bool("generate-config", false, "生成默认配置") - outputPath = flag.String("o", "", "输出文件路径(配合 --generate-config)") - showVersion = flag.Bool("v", false, "显示版本") + "rua.plus/lolly/internal/app" ) func main() { + cfgPath := flag.String("c", "lolly.yaml", "配置文件路径") + cfgPathLong := flag.String("config", "", "配置文件路径(长参数)") + genConfig := flag.Bool("generate-config", false, "生成默认配置") + outputPath := flag.String("o", "", "输出文件路径(配合 --generate-config)") + showVersion := flag.Bool("v", false, "显示版本") + flag.Parse() - // --generate-config 优先处理 - if *genConfig { - handleGenerateConfig(*outputPath) - return - } - - // 版本显示 - if *showVersion { - printVersion() - return - } - // 合并短参数和长参数 configPath := *cfgPath if *cfgPathLong != "" { configPath = *cfgPathLong } - // 加载配置 - cfg, err := config.Load(configPath) - if err != nil { - fmt.Fprintf(os.Stderr, "加载配置失败: %v\n", err) - os.Exit(1) - } - - fmt.Printf("配置加载成功: %s\n", configPath) - fmt.Printf("监听地址: %s\n", cfg.Server.Listen) - - // TODO: 启动服务器 - fmt.Println("服务器启动中...") -} - -func handleGenerateConfig(outputPath string) { - cfg := config.DefaultConfig() - yamlData, err := config.GenerateConfigYAML(cfg) - if err != nil { - fmt.Fprintf(os.Stderr, "生成配置失败: %v\n", err) - os.Exit(1) - } - - if outputPath == "" { - fmt.Print(string(yamlData)) - } else { - if err := os.WriteFile(outputPath, yamlData, 0644); err != nil { - fmt.Fprintf(os.Stderr, "写入文件失败: %v\n", err) - os.Exit(1) - } - fmt.Printf("配置已写入: %s\n", outputPath) - } -} - -func printVersion() { - fmt.Printf("lolly version %s\n", version) - fmt.Printf(" Git: %s (%s)\n", gitCommit, gitBranch) - fmt.Printf(" Built: %s\n", buildTime) - fmt.Printf(" Go: %s\n", goVersion) - fmt.Printf(" Platform: %s\n", buildPlatform) + os.Exit(app.Run(configPath, *genConfig, *outputPath, *showVersion)) } \ No newline at end of file