2读取配置

野生程序员2022年6月14日
大约 1 分钟

运行

//安装依赖
go mod tidy
//运行
go run main.go
//浏览器打开
http://127.0.0.1:8123/version

代码

package main

import (
    "fmt"
    "net/http"

    "github.com/fsnotify/fsnotify"

    "github.com/gin-gonic/gin"
    "github.com/spf13/viper"
)

type Config struct {
    Port    int    `mapstructure:"port"`
    Version string `mapstructure:"version"`
}

var Conf = new(Config)

func main() {
    viper.SetConfigFile("./conf/config.yaml") // 指定配置文件路径
    err := viper.ReadInConfig()               // 读取配置信息
    if err != nil {                           // 读取配置信息失败
        panic(fmt.Errorf("Fatal error config file: %s \n", err))
    }
    // 将读取的配置信息保存至全局变量Conf
    if err := viper.Unmarshal(Conf); err != nil {
        panic(fmt.Errorf("unmarshal conf failed, err:%s \n", err))
    }
    // 监控配置文件变化
    viper.WatchConfig()
    // 注意!!!配置文件发生变化后要同步到全局变量Conf
    viper.OnConfigChange(func(in fsnotify.Event) {
        fmt.Println("夭寿啦~配置文件被人修改啦...")
        if err := viper.Unmarshal(Conf); err != nil {
            panic(fmt.Errorf("unmarshal conf failed, err:%s \n", err))
        }
    })

    r := gin.Default()
    // 访问/version的返回值会随配置文件的变化而变化
    r.GET("/version", func(c *gin.Context) {
        c.String(http.StatusOK, Conf.Version)
    })

    if err := r.Run(fmt.Sprintf(":%d", Conf.Port)); err != nil {
        panic(err)
    }
}


上次编辑于: 2022/6/18 06:35:58
贡献者: qq547176052
评论
Powered by Waline v2.6.3