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

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

viper实战教程

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

下面是目录结构

创建配置文件

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

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文件下添加以下内容:

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文件添加以下内容

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)
}

正常的输出结果:


相关文章
|
21天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
34 7
|
21天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
21天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
94 71
|
20天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
101 67
|
1天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
26 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
21天前
|
存储 Go
go语言中映射
go语言中映射
33 11
|
13天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
23天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
93 62
|
23天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
32 12
|
22天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
29 9