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:
parent
a265597d14
commit
77b0eccf4c
12
Makefile
12
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
|
||||
|
||||
79
internal/app/app.go
Normal file
79
internal/app/app.go
Normal 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
80
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))
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user