refactor(app): 将应用逻辑抽取到 internal/app 包

将版本信息和核心运行逻辑从 main.go 移至 internal/app/app.go,
main.go 仅保留 CLI 参数解析和入口调用。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-02 14:12:06 +08:00
parent a265597d14
commit 77b0eccf4c
3 changed files with 93 additions and 78 deletions

View File

@ -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

79
internal/app/app.go Normal file
View File

@ -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
}

80
main.go
View File

@ -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))
}