最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go?viper讀取配置文件的示例詳解

 更新時間:2023年08月29日 10:01:04   作者:copyLeft  
這篇文章主要為大家詳細介紹了Go語言如何利用viper實現(xiàn)讀取配置文件,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下

參考

viper github

API

Viper-Go一站式配置管理工具

安裝

    go get github.com/spf13/viper

簡單例子

/*
  目錄
    - main.go
    - config.yaml
*/
func main(){
	viper.SetConfigName("config") // 設置配置名稱
	viper.SetConfigFile("config.yaml") // 設置配置文件路徑
    // 讀取配置
	if err := viper.ReadInConfig(); err != nil{
		log.Fatal(err)
	}
    // 獲取配置數(shù)據(jù)
	summary := viper.GetString("Summary")
	fmt.Println(summary)
}

新建 Viper

viper 提供默認 Viper對象, 可直接使用。 也通過 New 方法創(chuàng)建自定義Viper

// 直接使用默認對象
viper.GetInt("count")
// 獲取全局Viper對象
globalViper := viper.GetViper()
// 新建Viper
conf := viper.New()
conf.SetConfigFile("config.yaml")

讀取配置文件

從配置讀取

 viper.SetConfigName("config")
 viper.SetConfigFile("config.yaml")
 if err := viper.ReadInConfig(); err != nil{
     log.Fatal(err)
 }
 version := viper.GetString("version")

從 io.Reader 讀取

func main(){
    file, err := os.Open("./config.yaml")
    if err != nil{
        log.Fatal(err)
    }
    defer file.Close()
    viper.SetConfig("yaml")
    version := viper.GetString("version")
    // 這里需要設置配置類型, 否則無法正確解釋配置內(nèi)容
    // 如果未配置類型,也可以通過 Get 方法獲取數(shù)據(jù)自行解析。
}

從 flag 讀取

import (
	"fmt"
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
)
func main() {
	pflag.String("ip", "127.0.0.1", "Server running address")
	pflag.Int64("port", 8080, "Server running port")
	pflag.Parse()
	viper.BindPFlags(pflag.CommandLine)
	fmt.Printf("ip :%s , port:%s", viper.GetString("ip"), viper.GetString("port"))
}

獲取值

值得獲取方法名為 Get[type] 形式

接口類型,既未作解析

Get

布爾

GetBool

時間

  • GetDuration
  • GetTime

數(shù)字

  • GetInt
  • GetInt32
  • GetInt64
  • GetFloat64
  • GetIntSlice
  • ....

字符

  • GetString
  • GetStringSlice
  • ....

設置默認值

setDefault

 viper.setConfigFile("config.yaml")
 viper.SetDefault("port", 8000)
 println(viper.GetInt("port") // 8000
 // 這里未讀取配置文件,將返回默認值

將配置映射到結(jié)構(gòu)體

Unmarshal 將配置屬性映射到 struct 中, 匹配模式類似 JSON 解析,只匹配大寫開頭的屬性

type User struct{
    ID string
    Name string
    nickName string // 小寫屬性將不做匹配
}
func main(){
    /* config.yaml
        id: id11
        name: Rogan
        nickName: "wolf"  
    */
    ...
    user := &User{}
    viper.Unmarshal(user)
    println(&user) // { id11, Rogan } 
}

UnmarshalExact 用法與 Unmarshal 相同, 不同的是struct 必須與配置屬性完全匹配,否則加報錯

 /*
  config.yaml
    id: 111
    name: Rogan
 */
 type Conf_1 struct{
     Id string
     Name string
 }
 // 將報錯
 type Conf_2 struct{
     Id string
 }

UnmarshalKey 匹配某一字段

 /*
  config.yaml
    server: 
        port: 8000
        host: localhost
 */
type ServerConf struct{
    Port int
    host string
}
func main(){
    ...
    serverConf := &ServerConf{}
    viper.UnmarshalKey("server", serverConfig)
}

混合配置 Merge[type]

MergeConfig

func main(){
    viper.SetConfigName("config")
	viper.SetConfigFile("config.yaml")
	viper.ReadInConfig()
	log.Println(viper.GetString("Summary"), viper.InConfig("Summary"))
	buff := []byte(`Name: jeck`)
	viper.MergeConfig(bytes.NewReader(buff))
	log.Println(viper.GetString("Name"))
}

監(jiān)聽文件

WatchConfig

func main(){
	viper.SetConfigName("config")
	viper.SetConfigFile("config.yaml")
	viper.ReadInConfig()
	viper.WatchConfig()
	for {
		log.Println(viper.GetString("version"))
		time.Sleep(time.Second * 5)
	}
}
// 初始 versioni: 1
// --> 1
// 修改config.yaml version: 2
// --> 2

OnConfigChange 響應配置變化

以上就是Go viper讀取配置文件的示例詳解的詳細內(nèi)容,更多關(guān)于go viper的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang?gRPC?HTTP協(xié)議轉(zhuǎn)換示例

    Golang?gRPC?HTTP協(xié)議轉(zhuǎn)換示例

    這篇文章主要為大家介紹了Golang?gRPC?HTTP協(xié)議轉(zhuǎn)換示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go語言執(zhí)行windows下命令行的方法

    go語言執(zhí)行windows下命令行的方法

    這篇文章主要介紹了go語言執(zhí)行windows下命令行的方法,實例分析了Go語言操作windows下命令行的技巧,需要的朋友可以參考下
    2015-03-03
  • Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀

    Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀

    這篇文章主要介紹了Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 深入了解Go的interface{}底層原理實現(xiàn)

    深入了解Go的interface{}底層原理實現(xiàn)

    本文主要介紹了Go的interface{}底層原理實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • golang實現(xiàn)瀏覽器導出excel文件功能

    golang實現(xiàn)瀏覽器導出excel文件功能

    這篇文章主要介紹了golang實現(xiàn)瀏覽器導出excel文件功能,文章通過golang導出excel文件返回給web,實現(xiàn)瀏覽器導出excel文件功能,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • Golang在Window環(huán)境使用Imagick7的過程

    Golang在Window環(huán)境使用Imagick7的過程

    這篇文章主要介紹了Golang在Window環(huán)境使用Imagick7的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Golang獲取當前時間代碼

    Golang獲取當前時間代碼

    本文給大家匯總介紹了golang中的相關(guān)的時間的操作,有需要的小伙伴可以拿走參考下
    2018-10-10
  • golang如何實現(xiàn)三元運算符功能

    golang如何實現(xiàn)三元運算符功能

    這篇文章主要介紹了在其他一些編程語言中,如?C?語言,三元運算符是一種可以用一行代碼實現(xiàn)條件選擇的簡便方法,那么在Go語言中如何實現(xiàn)類似功能呢,下面就跟隨小編一起學習一下吧
    2024-02-02
  • GO語言字符串常用操作小結(jié)

    GO語言字符串常用操作小結(jié)

    本文主要介紹了GO語言字符串常用操作小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Golang中切片長度和容量的區(qū)別示例詳解

    Golang中切片長度和容量的區(qū)別示例詳解

    切片長度與容量在Go中很常見,切片長度是切片中可用元素的數(shù)量,而切片容量是從切片中第一個元素開始計算的底層數(shù)組中的元素數(shù)量,這篇文章主要給大家介紹了關(guān)于Golang中切片長度和容量區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評論

嘉荫县| 濮阳市| 翼城县| 巴里| 上犹县| 滨州市| 淮北市| 汶上县| 敖汉旗| 海南省| 新巴尔虎右旗| 卢龙县| 昭平县| 高尔夫| 兴宁市| 盐津县| 酒泉市| 龙胜| 通榆县| 漳浦县| 北海市| 平南县| 鲁山县| 仙游县| 霍山县| 阿拉善右旗| 舞阳县| 莒南县| 鄂伦春自治旗| 平乐县| 青田县| 神池县| 加查县| 乐陵市| 石嘴山市| 克拉玛依市| 昌图县| 大理市| 莱州市| 运城市| 光山县|