79 lines
2.9 KiB
Go
79 lines
2.9 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/fsnotify/fsnotify"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
func New(path string) (*Config, error) {
|
|
v := viper.New()
|
|
v.AddConfigPath(filepath.Dir(path))
|
|
v.SetConfigName(filepath.Base(path))
|
|
v.SetConfigType(strings.TrimPrefix(filepath.Ext(path), "."))
|
|
if err := v.ReadInConfig(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
v.WatchConfig()
|
|
|
|
var config Config
|
|
v.OnConfigChange(func(e fsnotify.Event) {
|
|
fmt.Println("config file changed:", e.Name)
|
|
if err := v.Unmarshal(&config); err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
})
|
|
|
|
if err := v.Unmarshal(&config); err != nil {
|
|
return nil, err
|
|
}
|
|
return &config, nil
|
|
}
|
|
|
|
type Config struct {
|
|
App struct {
|
|
Host string `mapstructure:"host"` // 服务地址
|
|
Port int `mapstructure:"port"` // 服务端口
|
|
Prod bool `mapstructure:"prod"` // 是否正式
|
|
} `mapstructure:"app"`
|
|
DB struct {
|
|
Driver string `mapstructure:"driver"` // 数据库类型
|
|
Host string `mapstructure:"host"` // 数据库地址
|
|
Port int `mapstructure:"port"` // 数据库端口
|
|
Username string `mapstructure:"username"` // 数据库用户
|
|
Password string `mapstructure:"password"` // 数据库密码
|
|
DBName string `mapstructure:"db_name"` // 数据库名称
|
|
MaxIdleConns int `mapstructure:"max_idle_conns"` // 最大空闲连接数
|
|
MaxOpenConns int `mapstructure:"max_open_conns"` // 最大打开连接数
|
|
ConnMaxLifetime time.Duration `mapstructure:"conn_max_lifetime"` // 连接最大存活时间
|
|
ConnMaxIdleTime time.Duration `mapstructure:"conn_max_idle_time"` // 连接最大空闲时间
|
|
LogMode bool `mapstructure:"log_mode"` // 是否开启日志
|
|
} `mapstructure:"db"`
|
|
Redis struct {
|
|
Host string `mapstructure:"host"` // redis地址
|
|
Port int `mapstructure:"port"` // redis端口
|
|
Password string `mapstructure:"password"` // redis密码
|
|
DB int `mapstructure:"db"` // redis数据库
|
|
} `mapstructure:"redis"`
|
|
Cors struct {
|
|
Host string `mapstructure:"host"`
|
|
} `mapstructure:"cors"`
|
|
JWT struct {
|
|
SigningKey string `mapstructure:"signing_key"` // jwt签名
|
|
ExpiresTime time.Duration `mapstructure:"expires_time"` // 过期时间
|
|
RefreshTime time.Duration `mapstructure:"refresh_time"` // 刷新过期时间
|
|
Issuer string `mapstructure:"issuer"` // 签发者
|
|
} `mapstructure:"jwt"`
|
|
Captcha struct {
|
|
OpenCaptcha int `mapstructure:"open_captcha"` // 是否开启防爆次数
|
|
ImgWidth int `mapstructure:"img_width"` // 验证码图片宽度
|
|
ImgHeight int `mapstructure:"img_height"` // 验证码图片高度
|
|
KeyLong int `mapstructure:"key_long"` // 验证码长度
|
|
} `mapstructure:"captcha"`
|
|
}
|