注:本文为学习时记录的笔记,内容尚浅,后续有时间可能会完善
viper框架学习记录
1.安装与配置
安装viper库
go get github.com/spf13/viper
支持的文件类型
- json
- toml
- yaml
- yml
- properties
- props
- prop
- hcl
- tfvars
- dotenv
- env
- ini
2.使用示例
编写配置文件,以yaml为例
app:
env: local
port: 8080
app_name: online-practice-system
app_url: http://localhost
定义配置对应的结构体
type Configuration struct {
App App `mapstructure:"app" yaml:"app"`
}
type App struct {
Env string `mapstructure:"env" yaml:"env"`
Port string `mapstructure:"port" yaml:"port"`
AppName string `mapstructure:"app_name" yaml:"app_name"`
AppUrl string `mapstructure:"app_url" yaml:"app_url"`
}
定义viper读取配置的初始化代码
package bootstrap
import (
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
"online-practice-system/global"
"os"
)
func InitializeConfig() *viper.Viper {
config := "config.yaml"
if configEnv := os.Getenv("VIPER_CONFIG"); configEnv != "" {
config = configEnv
}
v := viper.New()
v.SetConfigFile(config)
v.SetConfigType("yaml")
if err := v.ReadInConfig(); err != nil {
panic(fmt.Errorf("read config failed: %s \n", err))
}
v.WatchConfig()
v.OnConfigChange(func(in fsnotify.Event) {
fmt.Println("config fileDriver changed:", in.Name)
if err := v.Unmarshal(&global.App.Config); err != nil {
fmt.Println(err)
}
})
if err := v.Unmarshal(&global.App.Config); err != nil {
fmt.Println(err)
}
return v
}
在main函数中调用初始化函数
func main() {
InitializeConfig()
}