中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中viper配置模塊的應用方法

發布時間:2021-07-10 09:06:07 來源:億速云 閱讀:165 作者:chen 欄目:編程語言

這篇文章主要介紹“Golang中viper配置模塊的應用方法”,在日常操作中,相信很多人在Golang中viper配置模塊的應用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Golang中viper配置模塊的應用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

前言

viper 支持Yaml、Json、 TOML、HCL 等格式,讀取非常的方便。

安裝

      go get github.com/spf13/viper

如果提示找不到golang.org/x/text/這個庫,是因為golang.org/x/text/這個庫在GitHub上托管的路徑不一致。

解決辦法:

可以從https://github.com/golang/text下載源碼下來,然后到$GOPATH/src下面創建golang.org/x/文件夾(已存在的忽略),把壓縮包的文件解壓到golang.org/x/文件夾之下。

然后執行  go install -x  golang.org/x/text  即可解決:

正文

初始結構目錄如下:

Golang中viper配置模塊的應用方法

準備測試使用的yaml文件,注意yaml的格式十分嚴格,主要是每個冒號后面必須要有空格,數組前要加“-”號表示連續(注意減號后面也有空格),內容如下:

TimeStamp: "2018-10-18 10:09:23"
Address: "Shenzhen"
Postcode: 518000
CompanyInfomation:
  Name: "Sunny"
  MarketCapitalization: 50000000
  EmployeeNum: 200
  Department:
    - "Finance"
    - "Design"
    - "Program"
    - "Sales"
  IsOpen: false

讀取yaml文件:

package main

import (
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	//讀取yaml文件
	v := viper.New()
	//設置讀取的配置文件
	v.SetConfigName("linux_config")
	//添加讀取的配置文件路徑
	v.AddConfigPath("./config/")
	//windows環境下為%GOPATH,linux環境下為$GOPATH
	v.AddConfigPath("$GOPATH/src/")
	//設置配置文件類型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig();err != nil {
		fmt.Printf("err:%s\n",err)
	}

	fmt.Printf(
		`
		TimeStamp:%s
		CompanyInfomation.Name:%s
		CompanyInfomation.Department:%s `,
		v.Get("TimeStamp"),
		v.Get("CompanyInfomation.Name"),
		v.Get("CompanyInfomation.Department"),
	)

	/*
	result:
	TimeStamp:2018-10-18 10:09:23
	CompanyInfomation.Name:Sunny
	CompanyInfomation.Department:[Finance Design Program Sales]
	*/

	
}

也可以直接反序列化為Struct,非常的方便:

package main

import (
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	//讀取yaml文件
	v := viper.New()
	//設置讀取的配置文件
	v.SetConfigName("linux_config")
	//添加讀取的配置文件路徑
	v.AddConfigPath("./config/")
	//windows環境下為%GOPATH,linux環境下為$GOPATH
	v.AddConfigPath("$GOPATH/src/")
	//設置配置文件類型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig();err != nil {
		fmt.Printf("err:%s\n",err)
	}

	fmt.Printf(
		`
		TimeStamp:%s
		CompanyInfomation.Name:%s
		CompanyInfomation.Department:%s `,
		v.Get("TimeStamp"),
		v.Get("CompanyInfomation.Name"),
		v.Get("CompanyInfomation.Department"),
	)

	/*
	result:
	TimeStamp:2018-10-18 10:09:23
	CompanyInfomation.Name:Sunny
	CompanyInfomation.Department:[Finance Design Program Sales]
	*/

	//反序列化
	parseYaml(v)

}

type CompanyInfomation struct{
	Name string
	MarketCapitalization int64
	EmployeeNum int64
	Department []interface{}
	IsOpen bool
}

type YamlSetting struct{
	TimeStamp string
	Address string
	Postcode int64
	CompanyInfomation CompanyInfomation
}


func parseYaml(v *viper.Viper){
	var yamlObj YamlSetting;
	if err := v.Unmarshal(&yamlObj) ; err != nil{
		fmt.Printf("err:%s",err)
	}
	fmt.Println(yamlObj)
	/*
	result:
	{2018-10-18 10:09:23 Shenzhen 518000 {Sunny 50000000 200 [Finance Design Program Sales] false}}
	*/
}

viper也提供了讀取Command Line參數的功能:

package main

import (
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	pflag.String("hostAddress", "127.0.0.1", "Server running address")
	pflag.Int64("port", 8080, "Server running port")
	pflag.Parse()

	viper.BindPFlags(pflag.CommandLine)
	fmt.Printf("hostAddress :%s , port:%s", viper.GetString("hostAddress"), viper.GetString("port"))
	/*
	example:
	go run main2.go --hostAddress=192.192.1.10 --port=9000
	help:
	Usage of /tmp/go-build183981952/b001/exe/main:
     --hostAddress string   Server running address (default "127.0.0.1")
     --port int             Server running port (default 8080)

	*/

}

很多時候,我們服務器啟動之后,如果臨時想修改某些配置參數,需要重啟服務器才能生效,但是viper提供了監聽函數,可以免重啟修改配置參數,非常的實用:

package main

import (
	"github.com/spf13/viper"
	"fmt"
	"golang.org/x/net/context"
	"github.com/fsnotify/fsnotify"
)

func main() {
	//讀取yaml文件
	v := viper.New()
	//設置讀取的配置文件
	v.SetConfigName("linux_config")
	//添加讀取的配置文件路徑
	v.AddConfigPath("./config/")
	//windows環境下為%GOPATH,linux環境下為$GOPATH
	v.AddConfigPath("$GOPATH/src/")
	//設置配置文件類型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig(); err != nil {
		fmt.Printf("err:%s\n", err)
	}

	//創建一個信道等待關閉(模擬服務器環境)
	ctx, _ := context.WithCancel(context.Background())
	//cancel可以關閉信道
	//ctx, cancel := context.WithCancel(context.Background())
	//設置監聽回調函數
	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Printf("config is change :%s \n", e.String())
		//cancel()
	})
	//開始監聽
	v.WatchConfig()
	//信道不會主動關閉,可以主動調用cancel關閉
	<-ctx.Done()

	/*
	result:
	config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE 
	config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE
	*/
}

到此,關于“Golang中viper配置模塊的應用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 滦平县| 兰坪| 桑植县| 洛南县| 兴安盟| 鄂州市| 娄底市| 陇南市| 廉江市| 茌平县| 阿尔山市| 游戏| 英山县| 陇川县| 娄烦县| 江永县| 临漳县| 集安市| 齐齐哈尔市| 樟树市| 德兴市| 黄冈市| 龙海市| 辉南县| 苗栗县| 南涧| 营山县| 长葛市| 唐河县| 安徽省| 曲沃县| 永靖县| 武定县| 洪泽县| 尼玛县| 永胜县| 扎赉特旗| 达孜县| 洞头县| 册亨县|