go - 如何在 Go 的 envconfig 库中使用“默认”结构标记?
问题描述
我正在尝试在大多数配置变量具有默认值的程序中使用envconfig
库https://github.com/kelseyhightower/envconfig,如果设置了特定的环境变量,我只想覆盖这些默认值。
我尝试运行以下示例程序:
package main
import (
"fmt"
"log"
"github.com/kelseyhightower/envconfig"
)
type config struct {
foo string `default:"bar"`
}
func main() {
var cfg config
if err := envconfig.Process("app", &cfg); err != nil {
log.Fatalln(err)
}
fmt.Println(cfg.foo)
}
没有设置APP_FOO
环境变量:
> echo $APP_FOO
但是,这不会bar
像我期望的那样打印:
> go run use_envconfig.go
我看不出我的实现与https://github.com/kelseyhightower/envconfig#struct-tag-support上记录的示例有何不同,以下评论与该示例有关:
如果 envconfig 找不到 的环境变量值
MYAPP_DEFAULTVAR
,它将使用“foobar”作为默认值填充它。
除非我设置环境变量,否则我怎样才能制作这个程序,以便cfg
' 的值foo
是?bar
APP_FOO
解决方案
在您的回答中,您不小心解决了问题。它不需要config
大写。它是Foo
。以下作品:演示。
type config struct {
Foo string `default:"bar"`
}
在 Go 中,只有大写的字段可以在当前包之外访问。Envconfig 只能访问大写的字段。将它们视为私人和公共财产。
小写是私有的,大写是公共的。
推荐阅读
- angular - HttpClient 获取对象对象
- maven - Sonatype Nexus 3 - 上传包含多个工件的 zip 文件
- python - python比较运算符冲突
- python - 创建在每个方向上偏移 1 的坐标列表
- c - stm32g483 基于 SysTick 的计时器的奇怪行为
- java - java错误:无法找到或加载主类test.HelloWorld
- java - jedis 无法连接到 redis docker 实例 - 连接被拒绝(连接被拒绝)
- excel - 导出到 excel (SSRS) 时显示/隐藏文本框
- macos - 如何访问 Docker 容器和主机中的服务器?
- python - Absolute_links 不使用 requests_html 返回容器中的所有链接