Go语言-配置管理神器viper

Posted 阿拉的梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言-配置管理神器viper相关的知识,希望对你有一定的参考价值。

工程目录

在这里插入图片描述

使用viper读取配置的简单demo

实现根据配置文件key获取value。
根据key前缀将value批量解析到结构体。
实时更新配置

配置文件config.properties

version=1.0
port=8080
demo.name=测试2
demo.user=tom
demo.age=10

main.go

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"net/http"
)

func main() {
	//初始化配置解析
	initViper()
	//生成gin引擎
	r := gin.Default()
	//初始化路由配置
	initRoutes(r)
	if err := r.Run(
		fmt.Sprintf(":%d", viper.GetInt("port"))); err != nil {
		panic(err)
	}
}

//全局变量-配置结构体
var Conf Config

//控制器方法version
func version(c *gin.Context) {
	fmt.Println("从viper直接读取的配置,demo.name:", viper.GetString("demo.name"))
	// 将读取的配置信息保存至全局变量Conf,若配置信息在子树中可以用viper.sub提取出来再解析到对应的结构体。相当于前缀解析
	if err := viper.Sub("demo").Unmarshal(&Conf); err != nil {
		panic(fmt.Errorf("unmarshal conf failed, err:%s \\n", err))
	}
	fmt.Println("结构体中的配置,Conf:", Conf)
	//响应
	c.String(http.StatusOK, viper.GetString("version"))
}

// Config 结构体
type Config struct {
	Name string `json:"name"`
	User string `json:"user"`
	Age  int    `json:"age"`
}

//初始化路由配置
func initRoutes(r *gin.Engine) {
	// 访问/version的返回值会随配置文件的变化而变化
	r.GET("/version", version)
}

//初始化viper配置解析
func initViper() {
	viper.SetConfigFile("conf.properties") // 指定配置文件
	viper.SetConfigName("config")     // 配置文件名称(无扩展名),没有这个会报找不到文件
	viper.SetConfigType("properties") // 如果配置文件的名称中没有扩展名,则需要配置此项
	viper.AddConfigPath("./conf")     // 指定查找配置文件的路径
	//viper.AddConfigPath(".")               //可以配置多个目录,还可以在工作目录中查找配置
	err := viper.ReadInConfig() // 读取配置信息
	if err != nil {             // 读取配置信息失败
		panic(fmt.Errorf("Fatal error conf file: %s \\n", err))
	}
	// 监控配置文件变化,实时更新到内存中
	viper.WatchConfig()
}

测试日志

[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:	export GIN_MODE=release
 - using code:	gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /version                  --> main.version (3 handlers)
[GIN-debug] Listening and serving HTTP on :8080
从viper直接读取的配置,demo.name: 测试2
结构体中的配置,Conf: {测试2 tom 10}
[GIN] 2021/05/23 - 16:27:19 | 200 |       797.8µs |             ::1 | GET      "/version"

使用外部配置文件

将conf文件夹拷出,放到exe同级目录,则直接使用外部配置文件,更新配置非常方便。
在这里插入图片描述
入门完毕,其他使用方法网上有很多,不再赘述。

以上是关于Go语言-配置管理神器viper的主要内容,如果未能解决你的问题,请参考以下文章

8.Go语言高并发与微服务实战 --- 分布式配置中心

golang 配置文件解析神器--viper

使用viper 进行golang 应用的配置管理

go读取配置模块viper

Go之viper配置

Go 每日一库之 viper