main.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/spf13/cobra"
  6. "github.com/runningwater/gohub/app/cmd"
  7. "github.com/runningwater/gohub/app/cmd/make"
  8. "github.com/runningwater/gohub/bootstrap"
  9. appConfig "github.com/runningwater/gohub/config"
  10. "github.com/runningwater/gohub/pkg/config"
  11. "github.com/runningwater/gohub/pkg/console"
  12. )
  13. func init() {
  14. // 加载 config 目录下的配置信息
  15. appConfig.Initialize()
  16. }
  17. func main() {
  18. // 应用主入口,默认调用 cmd.CmdServe 命令
  19. // 该命令会启动 HTTP 服务
  20. var rootCmd = &cobra.Command{
  21. Use: "gohub",
  22. Short: "gohub is a simple forum project",
  23. Long: `Default will run "serve" command, you can use "-h" flag to see all subcommands`,
  24. // 所有子命令都会调用以下代码来初始化配置信息
  25. PersistentPreRun: func(command *cobra.Command, args []string) {
  26. // 配置初始化,依赖命令行 --env 参数
  27. config.InitConfig(cmd.Env)
  28. // 初始化 Logger
  29. bootstrap.SetupLogger()
  30. // 初始化 DB
  31. // 注意: 初始化 DB 前应该先初始化 logger
  32. bootstrap.SetupDB()
  33. // 初始化 Redis
  34. bootstrap.SetupRedis()
  35. },
  36. }
  37. // 注册子命令
  38. rootCmd.AddCommand(
  39. cmd.CmdServe,
  40. cmd.CmdKey,
  41. cmd.CmdPlay,
  42. cmd.CmdMigrate,
  43. // cmd.CmdTestCommand,
  44. make.CmdMake,
  45. )
  46. // 配置默认运行 Web 服务
  47. cmd.RegisterDefaultCmd(rootCmd, cmd.CmdServe)
  48. // 注册全局参数 --env
  49. cmd.RegisterGlobalFlags(rootCmd)
  50. // 执行主命令
  51. if err := rootCmd.Execute(); err != nil {
  52. console.Exit(fmt.Sprintf("Failed to run app with %v: %s", os.Args, err.Error()))
  53. }
  54. }