Gin框架通过viper读取系统配置文件信息

本文介绍了如何在Go项目中使用Viper库来管理和加载配置文件,展示了如何定义和读取`Setting`、`Postgresql`和`Gin`结构体中的配置信息,以及如何在服务启动时设置全局变量。
摘要由CSDN通过智能技术生成

将一下代码放在setting包下

package setting

import (
	"github.com/spf13/viper"
)

type Setting struct {
	vp *viper.Viper
}

var sections = make(map[string]interface{})

// 读取配置
func NewSetting() (*Setting, error) {
	vp := viper.New()
	vp.SetConfigName("config")
	vp.AddConfigPath(".") //.表示根目录下,如果文件在其他包中则写包名
	vp.SetConfigType("yaml")

	//viper.SetConfigFile("./config.yaml") // 指定配置文件路径
	//viper.SetConfigName("config") // 配置文件名称(无扩展名)
	//viper.SetConfigType("yaml") // 如果配置文件的名称中没有扩展名,则需要配置此项
	//viper.AddConfigPath("/etc/appname/")   // 查找配置文件所在的路径
	//viper.AddConfigPath("$HOME/.appname")  // 多次调用以添加多个搜索路径
	//viper.AddConfigPath(".")               // 还可以在工作目录中查找配置
	
	
	err := vp.ReadInConfig()
	if err != nil {
		return nil, err
	}

	s := &Setting{vp}
	return s, nil
}

// 读取指定的一段
func (s *Setting) ReadSection(k string, v interface{}) error {
	err := s.vp.UnmarshalKey(k, v)
	if err != nil {
		return err
	}

	if _, ok := sections[k]; !ok {
		sections[k] = v
	}
	return nil
}

func (s *Setting) ReloadAllSection() error {
	for k, v := range sections {
		err := s.ReadSection(k, v)
		if err != nil {
			return err
		}
	}

	return nil
}

在一下文件中编辑结构体接受配置信息

package config

import (
	"awesomeProject/setting"
	"fmt"
)

// Postgresql数据源配置
type Postgresql struct {
	Username string `mapstructure:"username"`
	Password string `mapstructure:"password"`
	Host     string `mapstructure:"host"`
	Port     string `mapstructure:"port"`
	Database string `mapstructure:"database"`
}

type Gin struct {
	Port string `mapstructure:"port"`
}

// 定义全局变量
var (
	DatabaseSetting *Postgresql
	WebSetting      *Gin
)

// 读取配置到全局变量
func SetupSetting() error {
	s, err := setting.NewSetting()
	if err != nil {
		return err
	}
	err = s.ReadSection("Database", &DatabaseSetting)
	err = s.ReadSection("Gin", &WebSetting)

	if err != nil {
		return err
	}

	fmt.Println("setting:")
	fmt.Println(DatabaseSetting)
	return nil

}

在服务启动时调用如下

	err := config.SetupSetting()
	if err != nil {
		return
	}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值