Files
91-api-server/cmd/root.go
2026-06-10 02:33:35 +00:00

76 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var cfgFile string
// rootCmd 根命令
var rootCmd = &cobra.Command{
Use: "api-server",
Short: "高性能 API 服务,内置统计分析与运维监控",
Long: `api-server 是一个基于 Gin 框架的高性能 API 服务程序。
它内置了请求统计、IP 地理位置分析、并发监控等功能,
并通过嵌入式前端提供可视化仪表盘。
参考设计sol148-extractor模块化、CLI 驱动、Session 管理)`,
Run: func(cmd *cobra.Command, args []string) {
// 默认显示帮助
if len(args) == 0 {
cmd.Help()
return
}
},
}
// Execute 执行 CLI
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "配置文件路径 (YAML/JSON)")
rootCmd.PersistentFlags().String("host", "0.0.0.0", "监听地址")
rootCmd.PersistentFlags().IntP("port", "p", 8080, "监听端口")
rootCmd.PersistentFlags().String("mode", "release", "运行模式 (debug/release/test)")
rootCmd.PersistentFlags().Bool("geoip", false, "启用 IP 地理位置解析")
rootCmd.PersistentFlags().String("geoip-db", "./data/ip2region.xdb", "ip2region 数据库路径")
viper.BindPFlag("host", rootCmd.PersistentFlags().Lookup("host"))
viper.BindPFlag("port", rootCmd.PersistentFlags().Lookup("port"))
viper.BindPFlag("mode", rootCmd.PersistentFlags().Lookup("mode"))
viper.BindPFlag("geoip", rootCmd.PersistentFlags().Lookup("geoip"))
viper.BindPFlag("geoip_db", rootCmd.PersistentFlags().Lookup("geoip-db"))
// 添加子命令
rootCmd.AddCommand(serveCmd)
rootCmd.AddCommand(versionCmd)
}
func initConfig() {
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
} else {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
viper.AddConfigPath("./config")
}
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err == nil {
fmt.Fprintf(os.Stderr, "使用配置文件: %s\n", viper.ConfigFileUsed())
}
}