diff --git a/cmd/server/app/cmd/commands/root.go b/cmd/server/app/cmd/commands/root.go index 91c4ab34e351febf316678ab688dd22c479f69cc..f429591498ad6f3ce7c68343a614a85b1d8a20f3 100644 --- a/cmd/server/app/cmd/commands/root.go +++ b/cmd/server/app/cmd/commands/root.go @@ -17,10 +17,14 @@ var rootCmd = &cobra.Command{ } func Execute() { + // 如果没有传入任何命令行参数 if len(os.Args) == 1 { + // 将根命令的参数设置为只有命令行工具的名称 rootCmd.SetArgs([]string{cliName}) } + // 执行根命令 if err := rootCmd.Execute(); err != nil { + // 如果执行过程中发生错误,则退出程序并返回状态码1 os.Exit(1) } } diff --git a/cmd/server/app/cmd/commands/server.go b/cmd/server/app/cmd/commands/server.go index 8a9ddcb9158c62e8588175d9c499625a9d7ca0da..fc362cb92f540a047f345ca89e78dbb09e2bf308 100644 --- a/cmd/server/app/cmd/commands/server.go +++ b/cmd/server/app/cmd/commands/server.go @@ -26,42 +26,72 @@ const cliName = "start" var conut int64 func NewServerCommand() *cobra.Command { + // 创建一个新的 ServerOptions 实例 s := options.NewServerOptions() + + // 创建一个新的 cobra.Command 实例 cmd := &cobra.Command{ + // 示例用法 Example: ` - # run the pilotgo-server + # 运行 pilotgo-server pilotgo-server - or + 或者 pilotgo-server start `, - Use: cliName, + // 命令名称 + Use: cliName, + // 简短描述 Short: "Start the api-server", + // 执行命令的函数 RunE: func(cmd *cobra.Command, args []string) error { + // 获取配置文件路径 config_file, err := cmd.Flags().GetString(flagconfig) if err != nil { + // 封装错误信息并返回 return errors.Wrapf(err, "error accessing flag %s for command %s", flagconfig, cmd.Name()) } + // 打印加载的配置文件路径 klog.Infof("load configuration config_file is:%s", config_file) + + // 检查配置文件是否存在 isExist, _ := utils.IsFileExist(config_file) if !isExist { + // 返回配置文件不存在的错误信息 return errors.Errorf("%s not found,please check the file. Flags: -h, --help help for pilotgo", config_file) } + + // 尝试从磁盘加载配置 conf, err := options.TryLoadFromDisk(config_file) if err == nil { + // 将加载的配置赋值给 ServerOptions 实例的 ServerConfig 字段 s.ServerConfig = conf + // 将加载的配置赋值给全局配置变量的 OptionsConfig 字段 config.OptionsConfig = conf } else { + // 打印加载配置失败的信息并退出程序 klog.Fatal("Failed to load configuration from disk", err) } + + // 验证配置的正确性 if errs := s.ServerConfig.Validate(); len(errs) != 0 { + // 打印验证失败的错误信息 klog.Errorf("please check current config, errors is:%v", errs) + // 返回配置验证失败的错误信息 return errors.New("please check config_server.yaml") } + + // 执行 Run 函数,传入 ServerOptions 实例、信号处理器、cobra.Command 实例和配置变更监听器 return Run(s, signals.SetupSignalHandler(), cmd, options.WatchConfigChange()) }, } + + // 重置命令的标志 cmd.ResetFlags() + + // 添加配置文件路径的标志 cmd.Flags().StringP(flagconfig, "c", options.DefaultConfigFilePath, "choose config yaml file") + + // 返回创建的 cobra.Command 实例 return cmd } func run(opts *options.ServerOptions, ctx context.Context, _ *cobra.Command) error {