gin简单上手viper配置管理

1 篇文章 0 订阅

gin简单上手viper配置管理

前言

Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。

安装

go get github.com/spf13/viper

viper简介

Viper是适用于Go应用程序(包括Twelve-Factor App)的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:

  • 设置默认值
  • JSONTOMLYAMLHCLenvfileJava properties格式的配置文件读取配置信息
  • 实时监控和重新读取配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统(etcd或Consul)读取并监控配置变化
  • 从命令行参数读取配置
  • 从buffer读取配置
  • 显式配置值

gin框架项目中使用(以配置zap日志为例)

json文件的配置

config.json配置文件

{
  "level": "info",
  "filename": "logs/viper_zap_gin.log",
  "maxsize": "1",
  "max_age": "30",
  "max_backups": "5",
  "version": "v1.8"
}

启动文件main.go

package main

import (
	"fmt"
	"gin_demo/config"
	"gin_demo/logger"
	"gin_demo/router"
	"github.com/gin-gonic/gin"
	"github.com/spf13/viper"
	"log"
	"net/http"
)

type user struct {
	Name string `json:"name"`
	Age  int
}

func sayHi(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{
		"message": "hello gin",
		"version":viper.GetString("version"),
	})
}

func sayBye(c *gin.Context) {
	c.JSON(http.StatusOK, user{"bob", 22})
}
var logConf = new(config.LogConfig) // 使用new返回的对象就是一个指针
func main() {
	viper.SetConfigFile("./config/conf.json") //指定json配置文件的路径
	// viper.SetConfigFile("./config/conf.yaml") //指定yaml配置文件的路径
	err := viper.ReadInConfig() // 读取配置信息
	if err != nil{  // 配置失败
		panic(fmt.Errorf("Fatal error config file: %s \n", err))
	}

	if err = viper.Unmarshal(logConf); err != nil{
		panic(fmt.Errorf("unmarshal conf failed, err:%s \n", err))
	}
	// 监控配置文件变化
	viper.WatchConfig()

	// zap 初始化
	if err := logger.InitLogger(logConf); err != nil {
		fmt.Printf("init logger failed, err:%v\n", err)
		return
	}
	r := gin.New()
	r = router.SetupRouter()
	//r := gin.Default()
	r.GET("/hello", sayHi)
	r.GET("/bye", sayBye)

	err = r.Run(":8888")
	if err != nil {
		log.Fatal("gin run wrong")
	}
}

Logger.go日志的配置结构体

package config
type LogConfig struct {
	Level      string `mapstructure:"level"`
	Filename   string `mapstructure:"filename"`
	MaxSize    int    `mapstructure:"maxsize"`
	MaxAge     int    `mapstructure:"max_age"`
	MaxBackups int    `mapstructure:"max_backups"`
	Version    string `mapstructure:"version"`
}
// 配置文件的配置信息也可以写成
type LogConfig1 struct {
	Level      string `json:"level"`
	Filename   string `json:"filename"`
	MaxSize    int    `json:"maxsize"`
	MaxAge     int    `json:"max_age"`
	MaxBackups int    `json:"max_backups"`
	Version    string `json:"version"`
}
yaml文件的配置

config.yaml配置文件

level: "info"
filename: "logs/viper_gin.log"
maxsize: 1
max_age: 30
max_backups: 5
version: "v1.1"

启动文件只需修改viper.SetConfigFile("./config/conf.yaml")即可

参考:李文周

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值