main.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. // 初始化 Cache
  36. bootstrap.SetupCache()
  37. },
  38. }
  39. // 注册子命令
  40. rootCmd.AddCommand(
  41. cmd.CmdServe,
  42. cmd.CmdKey,
  43. cmd.CmdPlay,
  44. cmd.CmdMigrate,
  45. cmd.CmdDBSeed,
  46. // cmd.CmdTestCommand,
  47. make.CmdMake,
  48. cmd.CmdCache,
  49. )
  50. // 配置默认运行 Web 服务
  51. cmd.RegisterDefaultCmd(rootCmd, cmd.CmdServe)
  52. // 注册全局参数 --env
  53. cmd.RegisterGlobalFlags(rootCmd)
  54. // 执行主命令
  55. if err := rootCmd.Execute(); err != nil {
  56. console.Exit(fmt.Sprintf("Failed to run app with %v: %s", os.Args, err.Error()))
  57. }
  58. }