第一篇文章发表在公共帐户中:程序员阅读;欢迎关注,您可以尽快收到文章更新,请指出本文的来源!
对于现代应用程序,尤其是中等大小的项目,当程序启动和运行时,需要传递许多参数以控制程序的行为。这些参数可以通过以下方式传递给程序:
显然,对于GO项目,阅读命令行,环境变量和配置文件并不难,但是一一读取是很麻烦的。是否有第三方库?数据源的配置呢?
是的,建议在此处使用库。Viper支持不同数据源和不同格式的读取配置文件。这是用于阅读GO项目中的配置的工件。今天,遵循本文并一起探索!?
Viper是一种众所周知的GO项目配置解决方案。使用了许多著名的开源项目。例如,使用库,以及允许我们专注于自己的配置分析代码的项目代码的使用。
Viper支持来自多个数据源的配置值,因此,当相同的配置密钥值得多个数据源的值时,Viper读取的优先级如下:
优先示意图
毒蛇的安装非常简单。像其他第三方袋一样,您只需要命令安装,例如:
安装
使用
我们一直在说Viper以不同格式支持各种配置文件。它是什么格式?如下:
Viper配置的关键值没有由案例区分,例如:
了解什么是毒蛇之后,让我们看一下如何使用Viper来帮助我们阅读配置。
使用包装名称Viper,例如::
使用功能创建毒蛇结构,例如::
实际上,这是GO软件包的编程约定,该约定封装在函数对象的实现中,并通过软件包名称调用。
因此,下面的所有示例中的调用函数都使用Viper,可以参考名为Viper的对象或Viper.new()返回的对象。
直接指定文件路径
多人搜索
读取配置文件时,可能会出现错误。如果我们想判断是否是因为找不到文件,我们可以确定错误是否为。
除了读取配置文件外,Viper还支持配置值的配置值。Viper提供了四个功能来编写配置返回文件。
WriteConfigWriteConfig函数将在预装路径的配置文件中写入配置。如果存在配置文件,则覆盖它。如果没有,它将被创建。
SafeWriteConfigSafeWriterConfig和WriteConfig函数之间的唯一区别在于,如果存在配置文件,则将返回错误。
WriteConfigasWriteConfigas和WriteConfig函数之间的差异需要传递配置文件存储路径,而Viper将根据文件后缀编写格式。
SafeWriteConfigassafewRiteConfigas和WriteConfigas之间的唯一区别在于,如果存在配置文件,则返回错误。
Viper支持监视配置文件,并将更改配置文件以重新阅读配置文件和回调功能。这可能会避免在每种配置更改时重新启动应用程序的麻烦。
除了支持配置文件中的配置外,Viper还支持从io.Reader接口的实例读取配置(实际上,配置文件还实现了io.reader),例如:::::::
您还可以使用函数将其显示为关键设置值。该方法具有最高优先级,将涵盖其他地方的密钥价值,例如:
为配置密钥设置别名,以便我们可以使用其他名称访问配置而无需更改密钥。
为了读取操作系统环境变量,Viper提供以下五个功能:
有两种方法可以让Viper读取环境变量:
使用函数setEnvprefix可以为所有环境变量设置前缀。此前缀将影响功能和功能
大多数环境变量使用较低的数字(_)作为分离器。如果要替换它,则可以使用函数,例如:
默认情况下,如果读取的环境值为空的值(请注意,不是存在环境变量,而是其值为空),则它将继续从优化的级别找到配置。行为,允许环境空气的可变值有效,您可以调用该功能:
VIPER可以调和分析命令行相关的标志库以协调合作,从命令行中读取配置,该配置已在PFLAG库中构建 - 支持我们的接口,并为我们提供支持其他标志库的扩展
Pflag
如果我们不使用PFLAG库,则扩展其他标志,但是我们是否希望Viper帮助我们阅读命令行参数?
VIPER支持存储或读取远程配置存储中心的配置和NOSQL(当前支持ETCD,领事,Firestore)配置,并且可以实时监视配置的更改,但是您需要在代码中介绍以下软件包:
现在,远程配置中心存储以下JSON配置信息
然后,我们可以通过以下方面连接到系统并读取配置。我们还可以打开Goroutine Real -Time监视配置。
连接领事
连接等
连接Firestore
连接配置中心后,您可以读取配置文件的配置,例如:
监视配置系统,例如:
另外,当Viper Connect ECT,领事,Firestore用于配置传输时,它还支持解密,这可以更安全。如果要实现加密的传输,则可以将功能替换为功能。
Viper可以帮助我们阅读各个地方的配置。阅读配置后,如何使用它?
直接面试
对于多级配置密钥,您可以使用逗号分区号,例如:
对于数组,您可以访问序列号,例如:
您还可以使用功能来分析键的较低级别配置,例如:
Viper提供了以下访问配置的功能:
序列化读取配置后,除了使用上面列出的访问配置的功能外,配置还可以序列化到结构或地图中,这可以更方便地访问配置。
示例代码
配置文件:config.yaml
分析代码:
对于多层配置,Viper还支持序列化为复杂的strct,例如:
我们将config.yaml更改为以下结构:
示例程序
好吧,这篇文章已经写在这里,已经很长了。我相信,如果您在这里看到,您应该对毒蛇有一个非常详细的了解。如果文章错误或需要补充内容,请留言要讨论!
原始:https://juejin.cn/post/709641650804044685