1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
// main.go
package main
import (
"flag"
"fmt"
"log"
"os"
"runtime"
"time"
)
// 构建信息变量(在编译时注入)
var (
Version = "dev"
BuildTime = "unknown"
GitCommit = "unknown"
GoVersion = runtime.Version()
)
// 1. 命令行参数处理
func parseFlags() (string, bool, bool) {
var (
configFile = flag.String("config", "config.json", "配置文件路径")
verbose = flag.Bool("verbose", false, "详细输出")
version = flag.Bool("version", false, "显示版本信息")
)
flag.Parse()
if *version {
showVersion()
os.Exit(0)
}
return *configFile, *verbose, *version
}
// 2. 版本信息显示
func showVersion() {
fmt.Printf("应用版本信息:\n")
fmt.Printf(" 版本: %s\n", Version)
fmt.Printf(" 构建时间: %s\n", BuildTime)
fmt.Printf(" Git提交: %s\n", GitCommit)
fmt.Printf(" Go版本: %s\n", GoVersion)
fmt.Printf(" 操作系统: %s\n", runtime.GOOS)
fmt.Printf(" 架构: %s\n", runtime.GOARCH)
}
// 3. 应用配置
type Config struct {
Port int `json:"port"`
Host string `json:"host"`
Environment string `json:"environment"`
LogLevel string `json:"log_level"`
}
func loadConfig(configFile string) *Config {
// 默认配置
config := &Config{
Port: 8080,
Host: "localhost",
Environment: "development",
LogLevel: "info",
}
// 这里可以从文件加载配置
fmt.Printf("加载配置文件: %s\n", configFile)
return config
}
// 4. 应用主逻辑
func runApplication(config *Config, verbose bool) {
fmt.Printf("启动应用程序...\n")
fmt.Printf("监听地址: %s:%d\n", config.Host, config.Port)
fmt.Printf("环境: %s\n", config.Environment)
if verbose {
fmt.Printf("详细模式已启用\n")
fmt.Printf("日志级别: %s\n", config.LogLevel)
}
// 模拟应用运行
fmt.Println("应用程序正在运行...")
time.Sleep(2 * time.Second)
fmt.Println("应用程序正常退出")
}
func main() {
configFile, verbose, _ := parseFlags()
config := loadConfig(configFile)
if verbose {
showVersion()
fmt.Println()
}
runApplication(config, verbose)
}
|