package configs import ( "bytes" _ "embed" "io" "mini-chat/internal/pkg/env" "github.com/spf13/viper" ) var config = new(Config) type Config struct { MySQL struct { Read struct { Addr string `toml:"addr"` User string `toml:"user"` Pass string `toml:"pass"` Name string `toml:"name"` } `toml:"read"` Write struct { Addr string `toml:"addr"` User string `toml:"user"` Pass string `toml:"pass"` Name string `toml:"name"` } `toml:"write"` } `toml:"mysql"` JWT struct { AdminSecret string `toml:"admin_secret"` PatientSecret string `toml:"patient_secret"` DoctorSecret string `toml:"doctor_secret"` } `toml:"jwt"` Language struct { Local string `toml:"local"` } `toml:"language"` } var ( //go:embed dev_configs.toml devConfigs []byte //go:embed fat_configs.toml fatConfigs []byte //go:embed uat_configs.toml uatConfigs []byte //go:embed pro_configs.toml proConfigs []byte ) func init() { var r io.Reader switch env.Active().Value() { case "dev": r = bytes.NewReader(devConfigs) case "fat": r = bytes.NewReader(fatConfigs) case "uat": r = bytes.NewReader(uatConfigs) case "pro": r = bytes.NewReader(proConfigs) default: r = bytes.NewReader(fatConfigs) } viper.SetConfigType("toml") if err := viper.ReadConfig(r); err != nil { panic(err) } if err := viper.Unmarshal(config); err != nil { panic(err) } } func Get() Config { return *config }