123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- package configs
- import (
- "bytes"
- _ "embed"
- "io"
- "os"
- "path/filepath"
- "time"
- "github.com/xinliangnote/go-gin-api/pkg/env"
- "github.com/xinliangnote/go-gin-api/pkg/file"
- "github.com/fsnotify/fsnotify"
- "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"`
- Base struct {
- MaxOpenConn int `toml:"maxOpenConn"`
- MaxIdleConn int `toml:"maxIdleConn"`
- ConnMaxLifeTime time.Duration `toml:"connMaxLifeTime"`
- } `toml:"base"`
- } `toml:"mysql"`
- Redis struct {
- Addr string `toml:"addr"`
- Pass string `toml:"pass"`
- Db int `toml:"db"`
- MaxRetries int `toml:"maxRetries"`
- PoolSize int `toml:"poolSize"`
- MinIdleConns int `toml:"minIdleConns"`
- } `toml:"redis"`
- Mail struct {
- Host string `toml:"host"`
- Port int `toml:"port"`
- User string `toml:"user"`
- Pass string `toml:"pass"`
- To string `toml:"to"`
- } `toml:"mail"`
- HashIds struct {
- Secret string `toml:"secret"`
- Length int `toml:"length"`
- } `toml:"hashids"`
- 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)
- }
- viper.SetConfigName(env.Active().Value() + "_configs")
- viper.AddConfigPath("./configs")
- configFile := "./configs/" + env.Active().Value() + "_configs.toml"
- _, ok := file.IsExists(configFile)
- if !ok {
- if err := os.MkdirAll(filepath.Dir(configFile), 0766); err != nil {
- panic(err)
- }
- f, err := os.Create(configFile)
- if err != nil {
- panic(err)
- }
- defer f.Close()
- if err := viper.WriteConfig(); err != nil {
- panic(err)
- }
- }
- viper.WatchConfig()
- viper.OnConfigChange(func(e fsnotify.Event) {
- if err := viper.Unmarshal(config); err != nil {
- panic(err)
- }
- })
- }
- func Get() Config {
- return *config
- }
|