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ò)展中的示例。

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
我建議你使用spf13)的真棒Viper軟件包來(lái)讀取conf文件,它可以優(yōu)雅地解決你的問(wèn)題,你可以用它來(lái)加載許多其他類型的配置文件。
解決您的問(wèn)題
獲取軟件包
go get github.com/spf13/viper
配置文件
假設(shè)你有名為的配置文件:db.yaml
db: name: somedb host: localhost
代碼示例
正如我們所看到的,一旦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_XXX
viper.GetString("ENV_XXX")
當(dāng)我們不設(shè)置輸出時(shí),輸出將是
name
db.yaml
db.name: mysqldb
當(dāng)我們?cè)O(shè)置值時(shí):在 db.yaml 中,輸出將是
name
somedb
db.name: somedb
希望你會(huì)發(fā)現(xiàn)它有用!有關(guān)用法的更多詳細(xì)信息,請(qǐng)參閱蝰蛇自述文件

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" }
- 3 回答
- 0 關(guān)注
- 409 瀏覽
添加回答
舉報(bào)