Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 go配置文件读取

go配置文件读取

发布时间:2021-05-28   编辑:www.jquerycn.cn
jquery中文网为您提供go配置文件读取等资源,欢迎您收藏本站,我们将为您提供最新的go配置文件读取资源

一个强大简单好用的配置解决方案,Viper

Viper具有以下特性:

  • 设置默认值
  • 可以读取如下格式的配置文件:JSON、TOML、YAML、HCL
  • 监控配置文件改动,并热加载配置文件
  • 从环境变量读取配置
  • 从远程配置中心读取配置(etcd/consul),并监控变动
  • 从命令行 flag 读取配置
  • 从缓存中读取配置
  • 支持直接设置配置项的值

Viper的读取顺序:

  • viper.Set() 所设置的值
  • 命令行 flag
  • 环境变量
  • 配置文件
  • 配置中心:etcd/consul
  • 默认值

Viper在初始化之后,只需要调用viper.GetString()viper.GetInt()viper.GetBool() 等函数即可得到配置文件中对应的参数。

Viper 也可以非常方便地读取多个层级的配置,比如这样一个 YAML 格式的配置:

common:
    db:
        name: db
        addr: 127.0.0.1:3306
        username: root
        password: root

如果要读取name,只需要执行viper.GetString("common.db.name")就可以

下面来一个简单的例子介绍Viper:
config/config.go

package config

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

type Config struct {
	Name string
}

func Init(cfg string) error {
	c := Config{
		Name: cfg,
	}
    // 初始化配置文件
	if err := c.initConfig(); err != nil {
		return err
	}
	
	c.watchConfig()

	return nil
}

func (c *Config) initConfig() error {
	if c.Name != "" {
	   // 如果指定了配置文件,则解析指定的配置文件
		viper.SetConfigFile(c.Name)
	} else {
	   // 如果没有指定配置文件,则解析默认的配置文件
		viper.AddConfigPath("conf")
		viper.SetConfigName("config")
	}
   // 设置配置文件格式为YAML
	viper.SetConfigType("yaml")
	// viper解析配置文件
	if err := viper.ReadInConfig(); err != nil {
		return err
	}

	return nil
}

// 监听配置文件是否改变,用于热更新
func (c *Config) watchConfig() {
	viper.WatchConfig()
	viper.OnConfigChange(func(e fsnotify.Event) {
		fmt.Printf("Config file changed: %s\n", e.Name)
	})
}

conf/config.yaml

name: demo
common:
    db:
        name: db
        addr: 127.0.0.1:3306
        username: root
        password: root

main.go

package main

import (
	"test/config"
  "fmt"
	"github.com/spf13/viper"
)

func main() {

	if err := config.Init(""); err != nil {
		panic(err)
	}

	name := viper.GetString("name")

	fmt.Println("Viper get name:",name)
}

执行go run main.go
Viper get name: demo

微信搜索「goentry-xyz」,关注公众号「灯下独码」

到此这篇关于“go配置文件读取”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go 单元测试时读取配置文件
go读取toml文件配置文件
go 获取文件的md5值
Go环境变量配置及系统配置文件的区别
golang读取配置文件(ini文件)
想系统学习GO语言(Golang
golang开源配置管理组件-go-archaius介绍
golang读取配置文件
go基于viper实现配置文件热更新及其源码分析
Go语言爱好者周刊:第 78 期 — 这道关于 goroutine 的题

[关闭]