【Go】viper读取Go项目中的配置文件

引言

Viper是Go应用程序的完整配置解决方案,包括 12-Factor 应用程序。它设计用于在应用程序中工作,可以处理所有类型的配置需求和格式。它支持:

  • 设置默认值
  • 读取JSON、TOML、YAML、HCL、envfile和Java properties属性配置文件
  • 实时查看和重读配置文件(可选)
  • 从环境变量中读取
  • 从远程配置系统(etcd或Consor)读取数据,并观察变化
  • 从命令行标志读取
  • 从缓冲区读取
  • 设置显式值

Github地址:https://github.com/spf13/viper

基本用法

  • 本文以读取toml格式的配置文件为例子
  • 配置文件定义如下(config.toml)
[app]
port = 9000
init_models = false
loglevel = "debug"
logfile = "/tmp/app/log.log"
static_dir = "/tmp/app/static"
gateway = "localhost"

[secret]
jwt = "a-example-jwt-key"
package main

import (
	"fmt"
	"github.com/spf13/viper"
	"io/ioutil"
	"log"
	"os"
	"reflect"
	"strings"
)

//配置文件结构体,配置文件上的内容需要一一对应,可多不可少
type Configure struct {
   
	App struct {
   
		InitModels bool   `json:"init_models" remark:"是否初始化数据库模型" must:"false"`
		Port       int64  `json:"port" remark:"http端口"`
		Loglevel   string `json:"loglevel" remark:"日志级别"`
		Logfile    string `json:"logfile" remark:"日志文件"`
		StaticDir  string `json:"static_dir" remark:"静态文件目录"`
		Gateway    string `json:"gateway" remark:"网关服务器" must:"false"`
	}

	Secret struct {
   
		JWT string `json:"jwt" remark:"jwt密钥"`
	}
}

// 初始化viper
func initViper() {
   
	viper.SetConfigName("config") //指定配置文件的文件名称(不需要指定配置文件的扩展名)
	viper.AddConfigPath(".")      // 设置配置文件和可执行二进制文件在用一个目录
	viper.AutomaticEnv()          //自动从环境变量读取匹配的参数

	//读取-c输入的路径参数,初始化配置文件,如: ./main -c config.yaml
	if len(os.Args) >= 3 {
   
		if os.Args[1] == "-c" {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值