首页 > 其他分享 >golang:第三方库:用vipper解析yaml配置文件

golang:第三方库:用vipper解析yaml配置文件

时间:2024-12-21 09:42:54浏览次数:4  
标签:golang return err nil vipper vp Setting string 配置文件

一,安装第三方库

$ go get github.com/spf13/viper

二,代码

1,配置文件

Database:
  DBType: mysql
  UserName: dbusername
  Password: dbpassword
  Host: 127.0.0.1:3306
  DBName: dbname
  Charset: utf8
  ParseTime: True
  MaxIdleConns: 10
  MaxOpenConns: 30

 

2, 代码:封装:

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("config")
	vp.AddConfigPath(".")
	vp.SetConfigType("yaml")
	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
}

3,代码:读取到struct中

package config

import (
	"fmt"
	"industry/pkg/setting"
)

//数据库配置的struct类型
type DatabaseSettingS struct {
	DBType       string
	UserName     string
	Password     string
	Host         string
	DBName       string
	Charset      string
	ParseTime    bool
	MaxIdleConns int
	MaxOpenConns int
}

//定义全局变量
var (
	DatabaseSetting *DatabaseSettingS
)

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


	fmt.Println("setting:")
	//fmt.Println(ServerSetting)
	fmt.Println(DatabaseSetting)
	return nil
}

 4,main.go中做初始化:

func init() {

	err := config.SetupSetting()
	if err != nil {
		log.Fatalf("init.setupSetting err: %v", err)
	}


    //其他逻辑
}

 

三,测试效果:

$ go run main.go
setting:
&{mysql dbusername dbpassword 127.0.0.1:3306 dbname utf8 true 10 30}

 

标签:golang,return,err,nil,vipper,vp,Setting,string,配置文件
From: https://www.cnblogs.com/architectforest/p/18610448

相关文章

  • 2024 GoLang安装使用教程(附激活以及常见问题处理)
    第一步:下载GoLang安装包访问GoLang官网,下载GoLang第二步:安装GoLang下载完成后,进行安装,next,安装完成点击xx关掉程序!第三步:下载补丁GoLang补丁文件点击获取补丁下载成功后,打开标注的文件文件夹,进入到文件夹/jetbra注意:这个文件夹单独copy一份,所属文件夹......
  • vue3.5.13 + vite6.0.1搭建前端项目的配置文件
    main.js//vue版本为3.5.13import{createApp}from'vue'import'./style.css'importAppfrom'./App.vue'import'element-plus/dist/index.css'importrouterfrom'./router/index'constapp=createApp(App)......
  • golang单元测试和mock框架的介绍和推荐
    背景介绍:探索golang的单元测试框架,看一下哪种框架是结合业务体验更好的。推荐和不推荐使用的框架,我都会在标题中标注出来,没有标注的表示体验一般,但也没有特别的缺点,观望态度单元测试框架介绍原生testing示例funcTestModifyArr(t*testing.T){ arr:=[3]int{0,1,2}......
  • golang中延迟函数调用的知识点
    golang中延迟函数调用的知识点个较大的延迟调用队列可能会消耗很多内存。另外,某些资源可能因为某些调用被延迟的太久而未能被及时释放。比如,如果下面的例子中的函数需要处理大量的文件,则在此函数退出之前,将有大量的文件句柄得不到释放。funcwriteManyFiles(files[]File)er......
  • Golang内存模型与源码解析
    0、引言本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.41、Golang内存管理宏观结构假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性能瓶颈。尤其......
  • golang的互斥锁和读写锁
    golangmutex(互斥锁)1.锁最本质的作用保证原子性2.mutex使用原则适用于并发编程,尽量减少加锁区域的逻辑3.mutex的局限性仅限于单个进程内操作sema(信号量,semaphore的简称)是一种用于并发控制的机制资源计数:信号量维护一个资源计数。这个计数表示当前可用的资源数量获......
  • 「C/C++」C/C++ 之 用头文件作为程序的配置文件
    ✨博客主页何曾参静谧的博客(✅关注、......
  • Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日
    全部配置logback.xml<?xmlversion="1.0"encoding="UTF-8"?><configurationdebug="false"><propertyname="LOG_HOME"value="log"/><propertyname="LOG_NAME"value="......
  • 微服务的终极 Golang 框架:GoFr
    微服务的终极Golang框架:GoFr原创 南丞 PFinalClub  2024年12月18日13:18 上海PFinalClub一个有信念者所开发出的力量,大于99个只有兴趣者。113篇原创内容公众号微服务的终极Golang框架:GoFr前言Go语言因其出色的并发处理能力和简洁的语法,成......
  • golang 使用gzip对json例子
    packagemainimport(  "bytes"  "compress/gzip"  "encoding/json"  "fmt"  "io"  "log")//User结构体定义typeUserstruct{  ID int  `json:"id"`  Namestring......