Files
go-gin-api/configs/configs.go
T
新亮 8ed27cdce1 feature(1.2.8): 使用 embed 打包静态资源
- go version 升级为 1.16
- 使用 embed 特性,将静态资源打包进二进制文件
- 优化代码
2021-11-20 15:01:50 +08:00

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
}