start.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package cmd
  2. import (
  3. "bytes"
  4. "fmt"
  5. "github.com/spf13/cobra"
  6. "io/ioutil"
  7. "standard/cobra/internal/pkg/configs"
  8. "github.com/spf13/viper"
  9. "os"
  10. "standard/cobra/internal"
  11. )
  12. var (
  13. localConfig string
  14. mysql_username string
  15. mysql_password string
  16. mysql_host string
  17. mysql_port int
  18. mysql_database string
  19. goroot string
  20. startCmd = &cobra.Command{ // test
  21. Use: "start",
  22. Short: "Start Server.",
  23. Run: func(cmd *cobra.Command, args []string) {
  24. start()
  25. },
  26. }
  27. )
  28. func init() {
  29. rootCmd.AddCommand(startCmd)
  30. // test & test args
  31. startCmd.Flags().StringVarP(&localConfig, "CONFIG", "c", "/Users/miuye/Documents/Code/GoProject/src/standard/cobra/cfg.toml", "")
  32. // start args
  33. startCmd.Flags().StringVarP(&mysql_username, "mysql_username", "u", "root", "")
  34. startCmd.Flags().StringVarP(&mysql_password, "mysql_password", "w", "", "")
  35. startCmd.Flags().StringVarP(&mysql_host, "mysql_host", "o", "127.0.0.1", "")
  36. startCmd.Flags().IntVarP(&mysql_port, "mysql_port", "p", 3306, "")
  37. startCmd.Flags().StringVarP(&mysql_database, "mysql_database", "d", "test", "")
  38. startCmd.Flags().StringVarP(&goroot, "goroot", "g", os.Getenv("GOROOT"), "")
  39. }
  40. func readConfig(data []byte) (*configs.Config, error) {
  41. v := viper.New()
  42. v.SetConfigType("toml")
  43. reader := bytes.NewReader(data)
  44. err := v.ReadConfig(reader)
  45. if err != nil {
  46. return nil, err
  47. }
  48. //将配置Unmarshal到一个结构体中,为结构体中的对应字段赋值
  49. cfg := &configs.Config{}
  50. if err := v.Unmarshal(cfg); err != nil {
  51. return nil, err
  52. }
  53. return cfg, nil
  54. }
  55. func start(){
  56. //从io.Reader中读取中读取配置,来源可以是文件,也可以是程序中生成的字符串,甚至可以从网络连接中读取的字节流
  57. data, err := ioutil.ReadFile(localConfig)
  58. if err != nil {
  59. fmt.Println("Error: get config data error: ", err)
  60. return
  61. }
  62. config, err := readConfig(data)
  63. if err != nil {
  64. fmt.Println("Error: read config error: ", err)
  65. return
  66. }
  67. fmt.Println("port",config.Mysql.Port)
  68. run(config)
  69. }
  70. func run(config *configs.Config){
  71. internal.Serve(config)
  72. }