2025-04-02 10:16:07 +08:00

94 lines
2.1 KiB
Go

package config
import (
"fmt"
"path/filepath"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)
var File *Config
const ConfigDefaultFile = "config.dev.yaml"
type Config struct {
App App `mapstructure:"app" json:"app" yaml:"app"`
DB DB `mapstructure:"db" json:"db" yaml:"db"`
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
Cors Cors `mapstructure:"cors" json:"cors" yaml:"cors"`
JWT JWT `mapstructure:"jwt" json:"jwt" yaml:"jwt"`
AliyunUpload AliyunUpload `mapstructure:"aliyunupload" json:"aliyunupload" yaml:"aliyunupload"`
TencentUpload TencentUpload `mapstructure:"tencentupload" json:"tencentupload" yaml:"tencentupload"`
Captcha Captcha `mapstructure:"captcha" json:"captcha"`
Applet Applet `mapstructure:"applet" json:"applet" yaml:"applet"`
Smb Smb `mapstructure:"smb" json:"smb" yaml:"smb"`
}
func New(path string) (*Config, error) {
fp := "."
fn := ConfigDefaultFile
if len(path) > 0 {
fp, fn = filepath.Split(path)
if len(fp) == 0 {
fp = "."
}
}
v := viper.New()
v.AddConfigPath(fp)
v.SetConfigName(fn)
v.SetConfigType("yaml")
if err := v.ReadInConfig(); err != nil {
return nil, err
}
v.WatchConfig()
var conf *Config
v.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("config file changed:", e.Name)
if err := v.Unmarshal(&conf); err != nil {
fmt.Println(err)
}
})
if err := v.Unmarshal(&conf); err != nil {
return nil, err
}
return conf, nil
}
func Init(path string) error {
fp := "."
fn := ConfigDefaultFile
if len(path) > 0 {
fp, fn = filepath.Split(path)
if len(fp) == 0 {
fp = "."
}
}
v := viper.New()
v.AddConfigPath(fp)
v.SetConfigName(fn)
v.SetConfigType("yaml")
if err := v.ReadInConfig(); err != nil {
return err
}
v.WatchConfig()
v.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("config file changed:", e.Name)
if err := v.Unmarshal(&File); err != nil {
fmt.Println(err)
}
})
if err := v.Unmarshal(&File); err != nil {
return err
}
return nil
}