1 Star 0 Fork 0

tking / micro-service

Create your Gitee Account
Explore and code with more than 8 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
配置解决方案 viper.md 2.51 KB
Copy Edit Web IDE Raw Blame History
tking authored 2022-03-06 09:21 . viper

What is Viper?

Viper是一个完整的配置解决方案的Go应用程序,它可以处理所有类型的配置需求和格式。它支持:

  • 设置默认值
  • 从JSON, TOML, YAML, HCL, envfile和Java属性配置文件
  • 实时观看和重新读取配置文件(可选)
  • 从环境变量中读取
  • 读取远程配置系统(etcd或Consul),并观察变化
  • 从命令行标志读取
  • 读取缓冲区
  • 设置明确的值

读取配置文件

这里有一个app的配置yaml文件,并读取 配置文件:config.yaml

server:
  http:
    addr: 0.0.0.0:8888
    timeout: 60s
data:
  database:
    driver: postgres
    ip : "127.0.0.1"
    password : "123456"
    port : 5432
    user : "root"
  redis:
    addr: 127.0.0.1:6379
    read_timeout: 0.2s
    write_timeout: 0.2s

完整代码: hello_viper.go

package main

import (
	"fmt"
	"log"

	"github.com/spf13/viper"
)

func main() {
	viper.SetConfigName("config")
	viper.SetConfigType("yaml")
	viper.AddConfigPath(".")
	viper.SetDefault("redis.port", 6379)
	err := viper.ReadInConfig()
	if err != nil {
		log.Fatal("read config failed: %v", err)
	}
	fmt.Println(viper.Get("server.http.addr"))
	fmt.Println("database driver: ", viper.Get("data.database.driver"))
	fmt.Println("database ip: ", viper.Get("data.database.ip"))
	fmt.Println("database port: ", viper.Get("data.database.port"))
	fmt.Println("database user: ", viper.Get("data.database.user"))
	fmt.Println("database password: ", viper.Get("data.database.password"))
	fmt.Println("redis addr: ", viper.Get("data.redis.addr"))
}

输出

0.0.0.0:8888
database driver:  postgres
database ip:  127.0.0.1
database port:  5432
database user:  root
database password:  123456
redis addr:  127.0.0.1:6379

viper.Get() 返回的是一个interface,可指定类型

环境变量

Viper目前有五种方法可以帮助环境保护署开展工作:

  • AutomaticEnv()
  • BindEnv(string...) : error
  • SetEnvPrefix(string) 可以告诉 Viper 在读取环境变量时使用前缀
  • SetEnvKeyReplacer(string...) *strings.Replacer 重写 Env 键
  • AllowEmptyEnv(bool)
func init() { 
	viper.AutomaticEnv()
}
fmt.Println("GOPATH: ", viper.Get("GOPATH"))

输出

GOPATH:  :\workspace\gopath

监听文件修改

只需告诉viper实例watchConfig。您还可以为Viper提供一个函数,以便在每次发生更改时运行。

viper.WatchConfig()

参考:

github.com/spf13/viper

Comment ( 0 )

Sign in to post a comment

1
https://gitee.com/lucktk/study-nodes.git
git@gitee.com:lucktk/study-nodes.git
lucktk
study-nodes
micro-service
master

Search