第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 YML 中使用具有默認(rèn)值的 env 變量

在 YML 中使用具有默認(rèn)值的 env 變量

Go
尚方寶劍之說(shuō) 2022-10-04 16:39:22
我有以下代碼從yml讀取配置文件,其中也包括ENV變量:confContent, err := ioutil.ReadFile("config.yml")    if err != nil {        panic(err)    }    // expand environment variables    confContent = []byte(os.ExpandEnv(string(confContent)))    conf := &SysConfig{}    if err := yaml.Unmarshal(confContent, conf); err != nil {        panic(err)    }config.ymldb:  name: ${DB_NAME:qm}  host: localhost它正在工作,但是如果沒(méi)有給出env,我怎么能讓它讀取默認(rèn)值?DB_NAME
查看完整描述

3 回答

?
呼如林

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊

您可以使用時(shí)替換映射器,并考慮默認(rèn)值,如下所示:ExpandEnvExpand


package main


import (

    "fmt"

    "os"

    "strings"

)


func main() {

    mapper := func(placeholderName string) string {

        split := strings.Split(placeholderName, ":")

        defValue := ""

        if len(split) == 2 {

            placeholderName = split[0]

            defValue = split[1]

        }


        val, ok := os.LookupEnv(placeholderName)

        if !ok {

            return defValue

        }


        return val

    }


    os.Setenv("DAY_PART", "morning")


    fmt.Println(os.Expand("Good ${DAY_PART:test}, ${NAME:Gopher}", mapper))

}

這將呈現(xiàn)


Good morning, Gopher

這是基于操作系統(tǒng)包文檔中的擴(kuò)展中的示例。


查看完整回答
反對(duì) 回復(fù) 2022-10-04
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

我建議你使用spf13)的真棒Viper軟件包來(lái)讀取conf文件,它可以優(yōu)雅地解決你的問(wèn)題,你可以用它來(lái)加載許多其他類型的配置文件。

解決您的問(wèn)題

  1. 獲取軟件包

    go get github.com/spf13/viper
  1. 配置文件

假設(shè)你有名為的配置文件:db.yaml

db:
  name: somedb
  host: localhost
  1. 代碼示例

正如我們所看到的,一旦Viper加載了conf文件,我們就可以通過(guò)鍵獲取值。Yaml文件將被解析為嵌套結(jié)構(gòu),您可以將其解封為Golang結(jié)構(gòu),我們應(yīng)該使用它來(lái)獲取值,您可以參考此頁(yè)面以獲取更多用法信息。viper.GetString("db.name")

import (

    "fmt"


    "github.com/spf13/viper"

)


func InitConf() {

    viper.AutomaticEnv()     // read system env 

    viper.SetConfigName("db")  // conf file name to be load

    viper.AddConfigPath(".")    // conf file path


    viper.SetDefault("db.name", "mysqldb") // you can set default da name value here 


    // do read conf file and handle error

    if err := viper.ReadInConfig(); err != nil {

        if _, ok := err.(viper.ConfigFileNotFoundError); ok {

            // Config file not found; ignore error if desired

        } else {

            // Config file was found but another error was produced

        }

    }


    fmt.Printf("db.name: %s", viper.GetString("db.name"))

}

viper.AutomaticEnv()此方法將自動(dòng)讀取系統(tǒng) env,假設(shè)您有一個(gè)名為 env 的 env,然后您可以通過(guò)以下方式獲取它。如果 env 名稱與配置文件密鑰的名稱相同,則 viper 首先使用 envENV_XXXviper.GetString("ENV_XXX")

  • 當(dāng)我們不設(shè)置輸出時(shí),輸出將是namedb.yamldb.name: mysqldb

  • 當(dāng)我們?cè)O(shè)置值時(shí):在 db.yaml 中,輸出將是namesomedbdb.name: somedb

希望你會(huì)發(fā)現(xiàn)它有用!有關(guān)用法的更多詳細(xì)信息,請(qǐng)參閱蝰蛇自述文件


查看完整回答
反對(duì) 回復(fù) 2022-10-04
?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

我猜你有一個(gè)這樣的會(huì)議結(jié)構(gòu):

Db *struct{
        Name string
        Host string
    }

因此,要檢索Dbname的默認(rèn)變量,您必須像這樣檢查它:

if conf.Db == nil || conf.Db.Name == "" {
        conf.Db.Name = "test"
    }


查看完整回答
反對(duì) 回復(fù) 2022-10-04
  • 3 回答
  • 0 關(guān)注
  • 409 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)