mirror of
https://github.com/xinliangnote/go-gin-api.git
synced 2024-04-21 12:31:46 +00:00
140 lines
2.7 KiB
Go
140 lines
2.7 KiB
Go
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
|
|
}
|