为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 的 envconfig 库中使用“默认”结构标记?

如何在 Go 的 envconfig 库中使用“默认”结构标记?

Go
SMILET 2023-07-31 14:53:43
我正在尝试在程序中使用该envconfig库https://github.com/kelseyhightower/envconfig,其中大多数配置变量都有默认值,我只想在设置了特定环境变量时覆盖这些默认值。我尝试运行以下示例程序:package mainimport (    "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的 值为?foobarAPP_FOO
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

在您的回答中,您无意中解决了问题。并不是config需要大写。是的Foo。以下作品:演示

type config struct {
    Foo string `default:"bar"`
    }

在 Go 中,只有大写字段可以在当前包之外访问。Envconfig 只能访问大写字段。将它们视为私人和公共财产。

小写是私有的,大写是公共的。


查看完整回答
反对 回复 2023-07-31
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

一些实验表明 和 都config应该foo大写(分别为Config和Foo)。下面的程序,


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)

}

bar按预期产生:


> go run use_envconfig.go

bar


查看完整回答
反对 回复 2023-07-31
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信