go配置管理框架viper常用操作
官網(wǎng)地址:
GitHub - spf13/viper: Go configuration with fangs
常用操作:
Viper會(huì)按照下面的優(yōu)先級(jí)。每個(gè)項(xiàng)目的優(yōu)先級(jí)都高于它下面的項(xiàng)目:
- 顯示調(diào)用
Set
設(shè)置值 - 命令行參數(shù)(flag)
- 環(huán)境變量
- 配置文件
- key/value存儲(chǔ)
- 默認(rèn)值
配置文件 config.yaml
(當(dāng)前目錄下)
host: "0.0.0.0" mysql: host: "127.0.0.1" port: 3306 cache: cache1: max-items: 100 item-size: 64 cache2: max-items: 200 item-size: 80
配置
viper.SetDefault("redis.port", "localhost:6379") // viper.SetConfigFile("./config.yaml") // 配置文件路徑,此行和下面兩行效果相同 viper.SetConfigName("config") // 配置文件名 viper.SetConfigType("yaml") // 配置文件類型 viper.AddConfigPath("./") // 配置文件路徑 err := viper.ReadInConfig() // 查找并讀取配置文件 if err != nil { panic(fmt.Errorf("fatal error config file: %w", err)) // 處理錯(cuò)誤 }
從Viper獲取值
在Viper中,有幾種方法可以根據(jù)值的類型獲取值。存在以下功能和方法:
- Get(key string) : interface{}
- GetBool(key string) : bool
- GetFloat64(key string) : float64
- GetInt(key string) : int
- GetIntSlice(key string) : []int
- GetString(key string) : string
- GetStringMap(key string) : map[string]interface{}
- GetStringMapString(key string) : map[string]string
- GetStringSlice(key string) : []string
- GetTime(key string) : time.Time
- GetDuration(key string) : time.Duration
- IsSet(key string) : bool
- AllSettings() : map[string]interface{}
通過(guò)傳入.分隔的路徑
// Viper可以通過(guò)傳入.分隔的路徑來(lái)訪問(wèn)嵌套字段: mysqlHost := viper.GetString("mysql.host") // 訪問(wèn)mysql的host字段 fmt.Println("Mysql Host:", mysqlHost) mysqlPort := viper.GetInt("mysql.port") // 訪問(wèn)mysql的port字段 fmt.Println("Mysql Port:", mysqlPort)
提取子樹(shù)
// 提取子樹(shù) appConfig := viper.Sub("app") // 提取app子樹(shù) fmt.Println("App Config:", appConfig.AllSettings()) // 打印app子樹(shù)的所有設(shè)置 cache1 := appConfig.GetStringMapString("cache1") // 提取app子樹(shù)的cache1字段 cache2 := viper.Sub("app.cache2") // 提取app子樹(shù)的cache2字段 fmt.Println("Cache1:", cache1) // 打印app子樹(shù)的cache字段 fmt.Println("Cache2:", cache2.AllSettings()) // 打印app子樹(shù)的cache2字段的所有設(shè)置
反序列化
// 反序列化 var conf Config err = viper.Unmarshal(&conf) // 反序列化到結(jié)構(gòu)體 if err != nil { panic(fmt.Errorf("unable to decode into struct, %v", err)) // 處理錯(cuò)誤 } fmt.Println("Config Struct:", conf) // 打印反序列化后的結(jié)構(gòu)體
到此這篇關(guān)于go配置管理框架viper的文章就介紹到這了,更多相關(guān)go配置管理viper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go事務(wù)中止時(shí)是否真的結(jié)束事務(wù)解析
這篇文章主要為大家介紹了Go事務(wù)中止時(shí)是否真的結(jié)束事務(wù)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Go語(yǔ)言實(shí)現(xiàn)常用排序算法的示例代碼
排序算法是在生活中隨處可見(jiàn),也是算法基礎(chǔ),因?yàn)槠鋵?shí)現(xiàn)代碼較短,應(yīng)用較常見(jiàn)。所以在面試中經(jīng)常會(huì)問(wèn)到排序算法及其相關(guān)的問(wèn)題。本文為大家整理了一些Go語(yǔ)言中常用排序算法的實(shí)現(xiàn),需要的可以參考一下2022-08-08golang并發(fā)編程使用Select語(yǔ)句的實(shí)現(xiàn)
Go語(yǔ)言中的select語(yǔ)句是并發(fā)編程中的重要工具,允許Goroutine等待多個(gè)通道操作,它阻塞直至任一case可執(zhí)行,可用于接收數(shù)據(jù)、實(shí)現(xiàn)超時(shí)機(jī)制和非阻塞通道操作,感興趣的可以了解一下2024-10-10go 下載非標(biāo)準(zhǔn)庫(kù)包(部份包被墻了)到本地使用的方法
今天小編就為大家分享一篇go 下載非標(biāo)準(zhǔn)庫(kù)包(部份包被墻了)到本地使用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06