前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言中的配置管理神器 --viper 二 实战

go语言中的配置管理神器 --viper 二 实战

原创
作者头像
onenewcode
发布2024-02-04 20:44:36
1710
发布2024-02-04 20:44:36
举报
文章被收录于专栏:gowebgoweb

viper实战教程

本文将介绍一个基于viper读取配置文件的小demo。

下面是目录结构:

创建配置文件

在config下的config.yaml文件下添加以下内容

代码语言:go
复制
Server:
  RunMode: debug
  HttpPort: :8080
  ReadTimeout: 60
  WriteTimeout: 60
App:
  DefaultPageSize: 10
  MaxPageSize: 100
  LogSavePath: storage/logs
  LogFileName: tools
  LogFileExt: .log
Database:
  DBType: mysql
  Username: root  # 填写你的数据库账号
  Password: root  # 填写你的数据库密码
  Host: 127.0.0.1:3306
  DBName: douyin
  TablePrefix: blog_
  Charset: utf8
  ParseTime: True
  MaxIdleConns: 10
  MaxOpenConns: 30 在global文件夹下添加setting.go文件,并添加以下内容package global

import "studyviper/setting"

var (
	ServerSetting   *setting.ServerSettingS
	AppSetting      *setting.AppSettingS
	DatabaseSetting *setting.DatabaseSettingS
) 添加global文件时把几个类实例化为全局变量,方便将来其他需要的方法调用。创建配置类 创建配置类的目的是把配置文件中的属性加载如实体类里面,方便其他程序进行读取配置信息的操作。
在setting文件夹下的section.go文件夹下添加下面的内容:package setting

import "time"

type ServerSettingS struct {
	RunMode      string
	HttpPort     string
	ReadTimeout  time.Duration
	WriteTimeout time.Duration
}

type AppSettingS struct {
	DefaultPageSize int
	MaxPageSize     int
	LogSavePath     string
	LogFileName     string
	LogFileExt      string
}

type DatabaseSettingS struct {
	DBType       string
	UserName     string
	Password     string
	Host         string
	DBName       string
	TablePrefix  string
	Charset      string
	ParseTime    bool
	MaxIdleConns int
	MaxOpenConns int
}

添加配置规则

添加配置规则是为了让viper结构化的读取配置文件的信息,省略繁琐的手工步骤。

在setting文件夹下的setting.go文件下添加以下内容:

代码语言:go
复制
package setting

import "github.com/spf13/viper"

type Setting struct {
	vp *viper.Viper
}

// 实例化setting对象
func NewSetting() (*Setting, error) {
	vp := viper.New()          //创建viper对象
	vp.SetConfigName("config") //配置文件的名称
	vp.AddConfigPath("./config/")
	vp.SetConfigType("yaml") //配置文件的拓展名
	err := vp.ReadInConfig() //读取配置文件的内容
	if err != nil {
		return nil, err
	}

	return &Setting{vp}, nil
}
//可以选择 Unmarshaling 所有的值或特定得值到 struct,map 
func (s *Setting) ReadSection(k string, v interface{}) error {

	err := s.vp.UnmarshalKey(k, v)
	if err != nil {
		return err
	}

	return nil
}

测试启动类

编写main方法,查看程序是否按照期望进行输出。

在main.go文件添加以下内容

代码语言:go
复制
package main

import (
	"fmt"
	"studyviper/global"
	"studyviper/setting"
)

func main() {
	setting, err := setting.NewSetting()
	if err != nil {
		fmt.Println("初始化viper出错")
	}
	err = setting.ReadSection("Server", &global.ServerSetting)
	if err != nil {
		fmt.Println("读取Server配置出错")
	}
	fmt.Println(global.ServerSetting)
	err = setting.ReadSection("App", &global.AppSetting)
	if err != nil {
		fmt.Println("读取APP配置出错")
	}
	fmt.Println(global.AppSetting)
	err = setting.ReadSection("Database", &global.DatabaseSetting)
	if err != nil {
		fmt.Println("读取Database配置出错")
	}
	fmt.Println(global.DatabaseSetting)

}

正常的输出结果:

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • viper实战教程
  • 创建配置文件
  • 添加配置规则
  • 测试启动类
  • 我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档