命令记不住

登陆

WebGin 简单框架 - setting

WebGin简单框架-setting

Web目录结构

C:.
├─.idea
│  └─dictionaries
├─controllers
├─dao
│  ├─mysql
│  └─redis
├─dist
│  └─static
│      ├─css
│      ├─fonts
│      └─js
├─logger
├─logic
├─models
├─pkg
│  ├─myJWT
│  └─snowflake
├─routers
├─setting
└─main.go

1.config.yaml

app:
  name: "xiaodebu"
  port: 8080
  mode: "debug"
  ver: "1.1.6"
  default_page_size: 10
jwt:
  expire_seconds: 3600
  secret: "夏天夏天悄悄过去"
mysql:
  host: "127.0.0.1"
  port: 3306
  db: "webapp"
  user: "root"
  password: "root1234"
redis:
  host: "127.0.0.1"
  port: 6379
  db: 0
log:
  level: "insdsadfo"
  filename: "./app.log"
  max_size: 100
  max_age: 30
  max_backups: 7

2.setting.go

setting.go

package setting

import (
	"fmt"

	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

var Conf = new(Config)

type Config struct {
	*AppConfig   `mapstructure:"app"`
	*MySQLConfig `mapstructure:"mysql"`
	*RedisConfig `mapstructure:"redis"`
}

type AppConfig struct {
	Port int    `yaml:"port"`
	Mode string `yaml:"mode"`
	Ver  string `yaml:"ver"`
}

type MySQLConfig struct {
	User         string `yaml:"user"`
	Password     string `yaml:"password"`
	DB           string `yaml:"db"`
	Host         string `yaml:"host"`
	Port         int    `yaml:"port"`
	MaxConns     int    `yaml:"max_conns"`
	MaxIdleConns int    `yaml:"max_idle_conns"`
}

type RedisConfig struct {
	DB   string `yaml:"db"`
	Host string `yaml:"host"`
	Port int    `yaml:"port"`
}

func Init() error {
	// 从配置文件中加载配置信息
	viper.SetConfigName("config")  // 指定配置文件名称(不需要带后缀)
	viper.SetConfigType("yaml")    // 指定配置文件类型
	viper.AddConfigPath(".")       // 指定查找配置文件的路径(这里使用相对路径)
	viper.AddConfigPath("./conf/") // 指定查找配置文件的路径(这里使用相对路径)
	err := viper.ReadInConfig()    // 读取配置信息
	viper.Unmarshal(&Conf)
	viper.WatchConfig() // 监控配置文件的变更
	viper.OnConfigChange(func(e fsnotify.Event) {
		// 配置文件发生变更之后会调用的回调函数
		viper.Unmarshal(&Conf) // 当配置文件修改之后要把变更后的配置信息更新到全局变量Conf里
		fmt.Println("夭寿啦!配置文件被人修改啦!:", e.Name)
	})
	return err
}
推荐阅读