![viper logo](https://cloud.githubusercontent.com/assets/173412/10886745/998df88a-8151-11e5-9448-4736db51020d.png)
Go configuration with fangs!
Many Go projects are built using Viper including:
* [Hugo](http://gohugo.io)
* [EMC RexRay](http://rexray.readthedocs.org/en/stable/)
* [Imgur’s Incus](https://github.com/Imgur/incus)
* [Nanobox](https://github.com/nanobox-io/nanobox)/[Nanopack](https://github.com/nanopack)
* [Docker Notary](https://github.com/docker/Notary)
* [BloomApi](https://www.bloomapi.com/)
* [doctl](https://github.com/digitalocean/doctl)
* [Clairctl](https://github.com/jgsqware/clairctl)
[![Build Status](https://travis-ci.org/spf13/viper.svg)](https://travis-ci.org/spf13/viper) [![Join the chat at https://gitter.im/spf13/viper](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/spf13/viper?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![GoDoc](https://godoc.org/github.com/spf13/viper?status.svg)](https://godoc.org/github.com/spf13/viper)
## What is Viper?
Viper is a complete configuration solution for Go applications including 12-Factor apps. It is designed
to work within an application, and can handle all types of configuration needs
and formats. It supports:
* setting defaults
* reading from JSON, TOML, YAML, HCL, and Java properties config files
* live watching and re-reading of config files (optional)
* reading from environment variables
* reading from remote config systems (etcd or Consul), and watching changes
* reading from command line flags
* reading from buffer
* setting explicit values
Viper can be thought of as a registry for all of your applications
configuration needs.
## Why Viper?
When building a modern application, you don’t want to worry about
configuration file formats; you want to focus on building awesome software.
Viper is here to help with that.
Viper does the following for you:
1. Find, load, and unmarshal a configuration file in JSON, TOML, YAML, HCL, or Java properties formats.
2. Provide a mechanism to set default values for your different
configuration options.
3. Provide a mechanism to set override values for options specified through
command line flags.
4. Provide an alias system to easily rename parameters without breaking existing
code.
5. Make it easy to tell the difference between when a user has provided a
command line or config file which is the same as the default.
Viper uses the following precedence order. Each item takes precedence over the
item below it:
* explicit call to Set
* flag
* env
* config
* key/value store
* default
Viper configuration keys are case insensitive.
## Putting Values into Viper
### Establishing Defaults
A good configuration system will support default values. A default value is not
required for a key, but it’s useful in the event that a key hasn’t been set via
config file, environment variable, remote configuration or flag.
Examples:
```go
viper.SetDefault("ContentDir", "content")
viper.SetDefault("LayoutDir", "layouts")
viper.SetDefault("Taxonomies", map[string]string{"tag": "tags", "category": "categories"})
```
### Reading Config Files
Viper requires minimal configuration so it knows where to look for config files.
Viper supports JSON, TOML, YAML, HCL, and Java Properties files. Viper can search multiple paths, but
currently a single Viper instance only supports a single configuration file.
Viper does not default to any configuration search paths leaving defaults decision
to an application.
Here is an example of how to use Viper to search for and read a configuration file.
None of the specific paths are required, but at least one path should be provided
where a configuration file is expected.
```go
viper.SetConfigName("config") // name of config file (without extension)
viper.AddConfigPath("/etc/appname/") // path to look for the config file in
viper.AddConfigPath("$HOME/.appname") // call multiple times to add many search paths
viper.AddConfigPath(".") // optionally look for config in the working directory
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
```
### Watching and re-reading config files
Viper supports the ability to have your application live read a config file while running.
Gone are the days of needing to restart a server to have a config take effect,
viper powered applications can read an update to a config file while running and
not miss a beat.
Simply tell the viper instance to watchConfig.
Optionally you can provide a function for Viper to run each time a change occurs.
**Make sure you add all of the configPaths prior to calling `WatchConfig()`**
```go
viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
})
```
### Reading Config from io.Reader
Viper predefines many configuration sources such as files, environment
variables, flags, and remote K/V store, but you are not bound to them. You can
also implement your own required configuration source and feed it to viper.
```go
viper.SetConfigType("yaml") // or viper.SetConfigType("YAML")
// any approach to require this configuration into your program.
var yamlExample = []byte(`
Hacker: true
name: steve
hobbies:
- skateboarding
- snowboarding
- go
clothing:
jacket: leather
trousers: denim
age: 35
eyes : brown
beard: true
`)
viper.ReadConfig(bytes.NewBuffer(yamlExample))
viper.Get("name") // this would be "steve"
```
### Setting Overrides
These could be from a command line flag, or from your own application logic.
```go
viper.Set("Verbose", true)
viper.Set("LogFile", LogFile)
```
### Registering and Using Aliases
Aliases permit a single value to be referenced by multiple keys
```go
viper.RegisterAlias("loud", "Verbose")
viper.Set("verbose", true) // same result as next line
viper.Set("loud", true) // same result as prior line
viper.GetBool("loud") // true
viper.GetBool("verbose") // true
```
### Working with Environment Variables
Viper has full support for environment variables. This enables 12 factor
applications out of the box. There are four methods that exist to aid working
with ENV:
* `AutomaticEnv()`
* `BindEnv(string...) : error`
* `SetEnvPrefix(string)`
* `SetEnvKeyReplacer(string...) *strings.Replacer`
_When working with ENV variables, it’s important to recognize that Viper
treats ENV variables as case sensitive._
Viper provides a mechanism to try to ensure that ENV variables are unique. By
using `SetEnvPrefix`, you can tell Viper to use a prefix while reading from
the environment variables. Both `BindEnv` and `AutomaticEnv` will use this
prefix.
`BindEnv` takes one or two parameters. The first parameter is the key name, the
second is the name of the environment variable. The name of the environment
variable is case sensitive. If the ENV variable name is not provided, then
Viper will automatically assume that the key name matches the ENV variable name,
but the ENV variable is IN ALL CAPS. When you explicitly provide the ENV
variable name, it **does not** automatically add the prefix.
One important thing to recognize when working with ENV variables is that the
value will be read each time it is accessed. Viper does not fix the value when
the `BindEnv` is called.
`AutomaticEnv` is a powerful helper especially when combined with
`SetEnvPrefix`. When called, Viper will check for an environment variable any
time a `viper.Get` request is made. It will apply the following rules. It will
check for a environment variable with a name matching the key uppercased and
prefixed with the `EnvPrefix` if set.
`SetEnvKeyReplacer` allows you to use a `strings.Replacer` object to rewrite Env
keys to an extent. This is useful if you want to use `-` or something in your
`Get()` calls, but want your environmental variables to use `_` delimiters. An
example of using it can be found in `viper_
没有合适的资源?快使用搜索试试~ 我知道了~
利用go开发的学历认证系统.zip
共2000个文件
go:1688个
json:86个
md:65个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 170 浏览量
2023-12-24
15:36:47
上传
评论
收藏 26.51MB ZIP 举报
温馨提示
go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目 go语言开发项目go语言开发项目go语言开发项目go语言开发项目go语言开发项目
资源推荐
资源详情
资源评论
收起资源包目录
利用go开发的学历认证系统.zip (2000个子文件)
libotr_test_helper.c 6KB
sshd_test_pw.c 4KB
bootstrap.min.css 120KB
index.css 2KB
login.css 2KB
help.css 2KB
queryResult.css 1KB
addEdu.css 1KB
query.css 1KB
reset.css 707B
chacha20poly1305_vectors_test.go 312KB
root_darwin_armx.go 291KB
root_darwin_armx.go 256KB
test.pb.go 182KB
vectors_test.go 178KB
descriptor.pb.go 115KB
blake2b_test.go 107KB
generator.go 101KB
x509_test.go 100KB
blake2s_test.go 99KB
const.go 94KB
x509.go 90KB
revoked_test.go 88KB
vectors_test.go 80KB
verify_test.go 80KB
conformance.pb.go 75KB
all_test.go 74KB
message.pb.go 74KB
table_marshal.go 73KB
format_test.go 56KB
viper.go 52KB
endpointconfig_test.go 50KB
certificates.go 49KB
table_unmarshal.go 49KB
marshal_test.go 48KB
ocsp_test.go 48KB
handlers_test.go 48KB
test_objects.pb.go 46KB
name_constraints_test.go 46KB
assertions_test.go 45KB
xml.go 45KB
jsonpb_test.go 45KB
resmgmt_test.go 44KB
client_test.go 44KB
asn1_test.go 43KB
endpointconfig.go 42KB
edwards25519.go 42KB
read_test.go 42KB
mock_test.go 41KB
handlers.go 41KB
events.pb.go 40KB
protocol.pb.go 39KB
test.pb.go 39KB
logclient_test.go 39KB
assertions.go 38KB
mapstructure_test.go 38KB
local_test.go 37KB
require.go 36KB
flag_test.go 36KB
jsonpb.go 36KB
acme_test.go 36KB
otr.go 35KB
marshal.go 35KB
serialization_test.go 35KB
flag.go 35KB
viper_test.go 34KB
autocert.go 34KB
resmgmt.go 34KB
assertion_forward.go 34KB
ct_integration.go 33KB
asn1.go 33KB
dump_test.go 33KB
autocert_test.go 33KB
require_forward.go 33KB
integration_test.go 32KB
cast5.go 32KB
mapstructure.go 32KB
verify.go 31KB
cast_test.go 30KB
properties_test.go 30KB
acme.go 29KB
scanner_test_data.go 29KB
parsing_test.go 29KB
evaluation_test.go 28KB
bundler_test.go 28KB
trace.go 28KB
lookup_test.go 28KB
file_test.go 27KB
endpointconfig_override_test.go 27KB
multiple_orgs_test.go 27KB
lib.go 27KB
bundler.go 26KB
hammer.go 26KB
keys.go 25KB
dispatcher_test.go 25KB
mspimpl.go 25KB
mock.go 25KB
xml_test.go 25KB
caclient_test.go 25KB
caste.go 25KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
天天501
- 粉丝: 611
- 资源: 5908
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 109有序链表转换二叉搜索树.zip
- 108将有序数组转换为二叉搜索树.zip
- 人工智能算法python案例实战
- 107二叉树的层序遍历 II.zip
- 技术资料分享FPGA入门系列实验教程V1.0.zip
- 技术资料分享FPGA开发全攻略-上-.zip
- 这个开源项目主要旨在复制经典的时间序列预测算法论文 该模型主要基于GluonTS,框架主要
- 近一年的SRP项目:水声通信系统,包括潜水器框架、迷你PC和STM32主控板等硬件,以及RTX、CAN、Socket等软件 我
- 智能办公OA系统[SpringBoot2-快速开发平台]适用于医院、学校、中小企业等机构的管理 活动5.22+动态表
- led-tcp-master (235).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功