首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go之Viper

当你显式提供ENV变量名(第二个参数)时,它 不会 自动添加前缀。例如,如果第二个参数是“id”,Viper查找环境变量“ID”。...或者,你可以使用带有NewWithOptions工厂函数EnvKeyReplacer。...Viper使用crypt从K/V存储检索配置,这意味着如果你有正确gpg密匙,你可以配置加密存储并自动解密。加密是可选。...你可以远程配置与本地配置结合使用,也可以独立使用; crypt有一个命令行助手,你可以使用它将配置放入K/V存储。...在上面的所有示例,它们都以其单例风格方法演示了如何使用viper使用多个viper实例 你还可以在应用程序创建许多不同viper实例。每个都有自己独特一组配置和

6.3K101
您找到你想要的搜索结果了吗?
是的
没有找到

Golang 语言怎么使用 Viper 管理配置信息?

Viper 提供了一种机制,用于尝试确保 ENV 变量是唯一。通过使用 SetEnvPrefix,您可以告诉 Viper 在从环境变量读取时使用前缀。...环境变量名称是大小写敏感。如果未提供 ENV 变量名称,则 Viper 将自动假定 ENV 变量与以下格式匹配:前缀 + "_" + 所有 CAPS 键名称。...Viper 使用 crypt 从 K / V 存储检索配置,这意味着如果您具有正确 gpg 密钥,您可以配置加密后存储,并可以自动将其解密。加密是可选。...您可以远程配置与本地配置结合使用,也可以独立使用。 crypt 有一个命令行帮助程序,您可以用来配置放入 K / V 存储。...反序列化 您还可以选择所有或特定解析到 struct、map 和 etc。

6.3K40

viper 源码分析

当您明确提供ENV变量名称时,它不会自动添加前缀使用ENV变量时要认识到一件重要事情是每次访问时都会读取该Viper在BindEnv调用时不会修复该。...这些优先于默认,但会被从磁盘,标志或环境变量检索配置覆盖。 Viper使用crypt从K / V存储检索配置,这意味着您可以存储加密配置,并在拥有正确gpg密钥环时自动解密。...加密是可选。 您可以远程配置与本地配置结合使用,也可以独立使用。 crypt有一个命令行帮助程序,您可以使用它来配置放入K / V存储区。...读取键 viper 提供了多种形式读取方法。在上面的例子,我们看到了Get方法用法。Get方法返回一个interface{}使用有所不便。 GetType系列方法可以返回指定类型。...AllSettings以map[string]interface{}返回所有设置。 Unmarshal viper 支持配置Unmarshal到一个结构体,为结构体对应字段赋值。

94320

Golang生态:使用viper管理配置

我原来一直很欣赏ssh配置管理方式: 每一个配置项都有一个默认 这些默认可以配置文件(/etc/ssh/ssh_config)修改 每个配置项都可以通过命令行参数临时覆盖 一直以来笔者都希望在自己项目中实现类似的功能...: explicit call to Set: 在代码逻辑通过viper.Set()直接设置配置项 flag:命令行参数 env:环境变量 config:配置文件 key/value store:...(当前目录) 其中.ext表示配置文件后缀如yaml,我们甚至不用指定这个后缀,viper会找自己支持格式。如果想要指定配置文件路径,可以使用....,下面的代码viper会自动捕获所有以MYAPP_开头环境变量,比如Global.Source这个参数映射到了MYAPP_GLOBAL_SOURCE viper.AutomaticEnv(...会绑定所有环境变量,如果只希望绑定特定可以使用SetEnvPrefix("global.source", "MYAPP_GLOAL_SOURCE"),注意这个函数不会自动加上MYAPP前缀.

4.6K30

Go每日一库之6:viper

viper 会根据设置顺序依次查找; viper 获取值时使用section.key形式,即传入嵌套键名; 默认可以调用viper.SetDefault设置。...读取键 viper 提供了多种形式读取方法。在上面的例子,我们看到了Get方法用法。Get方法返回一个interface{}使用有所不便。 GetType系列方法可以返回指定类型。...命令行选项 如果一个键没有通过viper.Set显示设置,那么获取时尝试从命令行选项读取。 如果有,优先使用viper 使用 pflag 库来解析选项。...还可以通过viper.SetEnvPrefix方法设置环境变量前缀,这样一来,通过AutomaticEnv和一个参数BindEnv绑定环境变量, 在使用Get时候,viper 会自动加上这个前缀再从环境变量查找...如果对应环境变量不存在,viper 会自动键名全部转为大写再查找一次。所以,使用键名gopath也能读取环境变量GOPATH

25730

Go几种读取配置文件方式

比较有名方案有 使用viper管理配置[1] 支持多种配置文件格式,包括 JSON,TOML,YAML,HECL,envfile,甚至还包括Java properties 支持为配置项设置默认 可以通过命令行参数覆盖指定配置项...支持参数别名 viper[2]按照这个优先级(从高到低)获取配置项取值: explicit call to Set: 在代码逻辑通过viper.Set()直接设置配置项 flag:命令行参数...Set: 在代码逻辑通过viper.Set()直接设置配置项 flag:命令行参数 env:环境变量 config:配置文件 key/value store:etcd或者consul default...,可以使用SetEnvPrefix("global.source", "MYAPP_GLOAL_SOURCE"),注意这个函数不会自动加上MYAPP前缀. ---- 验证一下 命令行参数优先级高于...配置文件 viper可以配合pflag来使用,pflag可以理解为标准库flag一个增强版,viper可以绑定到pflag上 和cobra,viper一样,pflag也是同一作者作品 ---- 验证一下

48920

Golang实现非常好用第三方库(一)

concurrent-map提供了一种高性能解决方案:通过对内部map进行分片,降低锁粒度,从而达到最少锁等待时间(锁冲突)在Go 1.9之前,go语言标准库并没有实现并发map。...在Go 1.9,引入了sync.Map。新sync.Map与此concurrent-map有几个关键区别。标准库sync.Map是专为append-only场景设计。...因此,如果您想将Map用于一个类似内存数据库,那么使用我们版本可能会受益。...Bloom过滤器可以使用比原始集合少得多存储空间,但它允许一些“误报”:它有时可能会报告某个元素在集合,而不是在集合。...Viper可以搜索多个路径,但目前单个Viper实例仅支持单个配置文件。Viper不默认任何配置搜索路径,默认决策留给应用程序。

8.2K1042

使用Go构建一个Data Thrashing CLI工具

此命令来启动调用数据API接口: thrasher thrash 此命令用来检查请求发送到URI: thrasher config set 此命令可以用来检查请求将被发送URI: thrasher...现在,我继续在init函数添加一些代码来初始化并设置环境变量默认。...RootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") 使用Viper过程,我给thrasher设置了一个环境变量前缀...这意味着,我设置任何带有thrasher前缀变量都将作为环境变量,只针对我应用程序。然后,我将其中一个绑定到我想要命名uri环境变量。我会得到一个叫做uri环境变量。...我要添加第一个代码是使用viper来获取URI路径,并使用get来对URI路径发起一个请求。我将它添加到verify命令指针函数

88100

PhalGo-Viper获取配置

拥有一下功能以及特性如下: 设置默认 从JSON,toml YAML,HCl,和java属性配置文件 从环境变量env读取值 读缓冲区 远程读取配置文件 key不区分大小写 ##为什么用viper viper...不用担心你文件格式,可以获取环境变量,也可以从远端获取配置文件,并且还有缓冲机制,功能非常棒非常牛逼,能满足不同对配置文件使用要求,所以PhalGo采用viper来解决配置问题 ##初始化Config...PhalGo追求最简单使用各个组件所以viper我们只需要初始化就可以开始使用,我们只需要调用NewConfig函数需要你传入两个参数,一个是你文件相对于项目目录相对路径,比如我在项目目录下建立..."**是等价,所以可以通过phalgo.Config来调用viper提供方法 ##Config详解 ###设置默认 phalgo.Config.SetDefault("ContentDir", "...分割机制,比如上面演示 phalgo.Config.GetString("system.port") 就是获取二级参数 ##更多 viper提供很多有意思功能,可以通过开篇viper项目地址进行了解

97180

【Go API 开发实战 6】基础 2:配置文件读取

Viper 简介 Viper 是国外大神 spf13 编写开源配置解决方案,具有如下特性: 设置默认 可以读取如下格式配置文件:JSON、TOML、YAML、HCL 监控配置文件改动,并热加载配置文件...从环境变量读取配置 从远程配置中心读取配置(etcd/consul),并监控变动 从命令行 flag 读取配置 从缓存读取配置 支持直接设置配置项 Viper 配置读取顺序: viper.Set...所谓热更新是指:可以不重启 API 进程,使 API 加载最新配置项。...环境变量名格式为config/config.go 文件 viper.SetEnvPrefix("APISERVER")所设置前缀和配置名称大写, 二者用 _连接,比如APISERVER_RUNMODE...(4*time.Second) } .... } 编译并启动apiserver后,修改配置文件 runmode 为 test,可以看到runmode从debug变为test: ?

2K41

5.Go语言之配置文件读取学习记录

,常规配置文件格式有 json、ini、yaml (个人推荐)、properties 等,我们可以使用其为程序配置一些初始化可变参数,例如 数据库字符串链接以及认证密码等等。...INI文件,我们可以使用名为go-ini第三方库(a third-party library),它是一个非常方便、高效go配置文件操作库。..., 它是作为juju项目的一部分在Canonical开发,基于著名libyaml C库纯Go端口,可以快速可靠地解析和生成YAML数据。...,它被设计用于在应用程序工作,并且可以处理所有类型配置需求和格式,它支持以下特性: 设置默认以及显式配置 从JSON、TOML、YAML、HCL、envfile和Java properties格式配置文件读取配置信息...检索 i := viper.GetInt("flagname") fmt.Println(i) // 1234 } 示例2.使用viper读取yaml并存放在结构体 configs\prod.yaml

1K40

手把手,带你从零封装Gin框架(二):配置初始化 & 全局变量

这里我使用 viper 作为配置管理方案,它支持 JSON、TOML、YAML、HCL、envfile、Java properties 等多种格式配置文件,并且能够监听配置文件修改,进行热重载,详细介绍大家可以去官方文档查看... app package config type Configuration struct { App App `mapstructure:"app" json:"app" yaml:"...mapstructure 标签需对应 config.ymal 配置名称, viper 会根据标签 value 把 config.yaml 数据赋予给结构体 全局变量 新建 global/app.go...*viper.Viper Config config.Configuration } var App = new(Application) 使用 viper 载入配置 新建 bootstrap...:= "config.yaml" // 生产环境可以通过设置环境变量来改变配置文件路径 if configEnv := os.Getenv("VIPER_CONFIG"); configEnv

80810

irGSEA:基于秩次单细胞基因集富集分析整合框架

假如单细胞数据集整合到现有数据使用这些FCS方法需要重新计算每个细胞基因集富集分数。这个步骤可能是繁琐且资源密集。...; AddModuleScore需要先计算基因集中所有基因平均值,再根据平均值把表达矩阵切割成若干份,然后从切割后每一份随机抽取对照基因(基因集外基因)作为背景。...; Pagoda2 拟合每个细胞误差模型,并使用其第一个加权主成分量化基因集富集分数; AUCell 基于单个样本基因表达排名,使用曲线下面积来评估输入基因集是否在单个样本前5%表达基因内富集;...使用全局表达谱对差异分数进行标准化。 标准化这一步容易受样本构成影响。 JASMINE 根据在单个细胞中表达基因基因排名和表达基因基因集富集度计算近似平均值。...相比gmt文件,db.zip文件包含了基因集描述,可以用来筛选XX功能相关基因。下面的例子,我介绍如何筛选血管生成相关基因集。

1.4K11

基于 Go 语言开发在线论坛增补篇:通过 Viper 读取配置文件并实现热加载

Viper 是 Go 语言完整配置解决方案,支持多个数据源和丰富功能: 支持设置默认配置 从 JSON、YAML、TOML、HCL 等格式配置文件读取配置 支持从 OS 读取环境变量 支持读取命令行参数...支持从远程 KV 存储系统读取配置,包括 Etcd、Consul 等 可以监听配置变化,支持热加载 配置好数据源,初始化并启动 Viper 后,就可以通过 viper.Get 获取任意数据源配置...,非常方便,还可以调用 viper.Unmarshal 方法配置射到指定结构体指针。...,不影响和阻塞当前协程),一旦配置文件有变更,即可通过定义在 runtimeViper.OnConfigChange 匿名回调函数重新加载配置文件并将配置射到 ViperConfig 指针,同时再次加载新语言文件...本地化设置也正常,为了测试配置文件热加载,我们 App.Language 配置设置为 en: { "App": { "Address": "0.0.0.0:8080", "Static

1.9K40

微服务架构之Spring Boot(二十七)

可以使用以下属性名称: 表24.1。..._ 不应在属性名称 中使用 由下划线包围数字,例 如 MY_ACME_1_OTHER = my.acme[1].other 系统属性 骆驼案,烤肉串案例或下划线表示法 使用 [ ] 或逗号分隔标准列表语法...绑定到 Map 属性时,如果 key 包含除小写字母数字字符或 - 以外任何内容,则需要使用括号表示法以保留原始。如果密钥未被 [] 包围,则 删除任何非字母数字或 - 字符。...对于YAML,逗号分隔列表和YAML列表都可用于完全覆盖列表内容。 对于 Map 属性,您可以绑定从多个源中提取属性。但是,对于多个源相同属性,使用具有最高优先级属性。...但 是,如果 dev 配置文件已启用,则 map 包含两个带有密钥 key1 条目(名称为 dev name 1 且描述为 my description 1 )和 key2 (带有名 称 dev name

59930

GoFrame 框架(rk-boot): 基于云原生环境,区分配置文件(Config)

我们使用 config 作为 boot.yaml 配置文件入口,可以提供多个 config 文件路径。...这四个环境变量可以是任意。 最佳实践 举个例子,我们有一个【云相册】业务。此业务在不同环境里使用 MySQL IP 地址不一样,则可以这么配置。...这时候,我们可以Viper 里配置一个【环境变量前缀】来标记我们 Config。 举个例子,假设系统已经把 HOSTNAME 作为环境变量,初始化到每一个机器。...如果我们强制修改这个,会遇到不可预测错误。这时候,我们可以添加一个前缀。...例子: config/default.yaml --- hostname: my-hostname boot.yaml 在 config 选项,添加我们 ENV 前缀

1.2K60
领券