| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package cmd
- import (
- "bytes"
- "fmt"
- "github.com/spf13/cobra"
- "io/ioutil"
- "standard/cobra/internal/pkg/configs"
- "github.com/spf13/viper"
- "os"
- "standard/cobra/internal"
- )
- var (
- localConfig string
- mysql_username string
- mysql_password string
- mysql_host string
- mysql_port int
- mysql_database string
- goroot string
- startCmd = &cobra.Command{ // test
- Use: "start",
- Short: "Start Server.",
- Run: func(cmd *cobra.Command, args []string) {
- start()
- },
- }
- )
- func init() {
- rootCmd.AddCommand(startCmd)
- // test & test args
- startCmd.Flags().StringVarP(&localConfig, "CONFIG", "c", "/Users/miuye/Documents/Code/GoProject/src/standard/cobra/cfg.toml", "")
- // start args
- startCmd.Flags().StringVarP(&mysql_username, "mysql_username", "u", "root", "")
- startCmd.Flags().StringVarP(&mysql_password, "mysql_password", "w", "", "")
- startCmd.Flags().StringVarP(&mysql_host, "mysql_host", "o", "127.0.0.1", "")
- startCmd.Flags().IntVarP(&mysql_port, "mysql_port", "p", 3306, "")
- startCmd.Flags().StringVarP(&mysql_database, "mysql_database", "d", "test", "")
- startCmd.Flags().StringVarP(&goroot, "goroot", "g", os.Getenv("GOROOT"), "")
- }
- func readConfig(data []byte) (*configs.Config, error) {
- v := viper.New()
- v.SetConfigType("toml")
- reader := bytes.NewReader(data)
- err := v.ReadConfig(reader)
- if err != nil {
- return nil, err
- }
- //将配置Unmarshal到一个结构体中,为结构体中的对应字段赋值
- cfg := &configs.Config{}
- if err := v.Unmarshal(cfg); err != nil {
- return nil, err
- }
- return cfg, nil
- }
- func start(){
- //从io.Reader中读取中读取配置,来源可以是文件,也可以是程序中生成的字符串,甚至可以从网络连接中读取的字节流
- data, err := ioutil.ReadFile(localConfig)
- if err != nil {
- fmt.Println("Error: get config data error: ", err)
- return
- }
- config, err := readConfig(data)
- if err != nil {
- fmt.Println("Error: read config error: ", err)
- return
- }
- fmt.Println("port",config.Mysql.Port)
- run(config)
- }
- func run(config *configs.Config){
- internal.Serve(config)
- }
|