欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go學習筆記讀取consul配置文件詳解

 更新時間:2022年05月19日 10:28:31   作者:dz45693  
這篇文章主要為大家介紹了go學習筆記讀取consul配置文件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

新建yaml文件

在上文我們的 go學習筆記:使用 consul 做服務發(fā)現(xiàn)和配置共享 這里我們單獨來用viper實現(xiàn)讀取consul的配置, 我習慣與用yaml格式, 所以 首先 新建yaml文件

store:
  book:
    - author: john
      price: 10
    - author: ken
      price: 12
  bicycle:
    color: red
    price: 19.95

讀取遠程配置

可以直接調用viper.AddRemoteProvider讀取遠程配置, 也可以用github.com/hashicorp/consul/api 來讀取consul的內容, 然后在用viper讀取,

整改代碼如下:

package main
import (
	"bytes"
	"fmt"
	"log"
	"time"
	consulapi "github.com/hashicorp/consul/api"
	"github.com/hashicorp/consul/api/watch"
	"github.com/spf13/viper"
	_ "github.com/spf13/viper/remote"
)
var (
	defaultConfig *viper.Viper
	consulAddress string
	consulPath    string
)
func initConfig() *viper.Viper {
	consulAddress = "http://192.168.100.19:8500"
	consulPath = "config/v1/local"
	defaultConfig = viper.New()
	defaultConfig.SetConfigType("yaml")
	consulClient, err := consulapi.NewClient(&consulapi.Config{Address: consulAddress})
	if err != nil {
		log.Fatalln("consul連接失敗:", err)
	}
	kv, _, err := consulClient.KV().Get(consulPath, nil)
	if err != nil {
		log.Fatalln("consul獲取配置失敗:", err)
	}
	err = defaultConfig.ReadConfig(bytes.NewBuffer(kv.Value))
	if err != nil {
		log.Fatalln("Viper解析配置失敗:", err)
	}
	go watchConfig()
	return defaultConfig
}
func watchConfig() {
	time.Sleep(time.Second * 10)
	params := make(map[string]interface{})
	params["type"] = "key"
	params["key"] = consulPath
	w, err := watch.Parse(params)
	if err != nil {
		log.Fatalln(err)
	}
	w.Handler = func(u uint64, i interface{}) {
		kv := i.(*consulapi.KVPair)
		hotconfig := viper.New()
		hotconfig.SetConfigType("yaml")
		err = hotconfig.ReadConfig(bytes.NewBuffer(kv.Value))
		if err != nil {
			log.Fatalln("Viper解析配置失敗:", err)
		}
		defaultConfig = hotconfig
	}
	err = w.Run(consulAddress)
	if err != nil {
		log.Fatalln("監(jiān)聽consul錯誤:", err)
	}
}
func GetConfig() *viper.Viper {
	if defaultConfig == nil {
		defaultConfig = initConfig()
	}
	return defaultConfig
}
func main() {
	ReadOne()
	go func() {
		for {
			host := GetConfig().GetString("store.bicycle.color")
			fmt.Println("consul===", host)
			time.Sleep(time.Second * 10)
		}
	}()
	select {}
}
func ReadOne() {
	runtimeConfig := viper.New()
	runtimeConfig.AddRemoteProvider("consul", "http://192.168.100.19:8500", "config/v1/local")
	runtimeConfig.SetConfigType("yaml")
	err := runtimeConfig.ReadRemoteConfig()
	if err != nil {
		log.Fatalln("viper read:", err)
	}
	err = runtimeConfig.WatchRemoteConfigOnChannel()
	if err != nil {
		log.Fatalln("viper watch err:", err)
	}
	go func() {
		for {
			host := runtimeConfig.GetString("store.bicycle.color")
			fmt.Println("viper=====", host)
			time.Sleep(time.Second * 10)
		}
	}()
}

如果遇到 

google.golang.org/grpc/naming: module google.golang.org/grpc@latest found (v1.31.0), but does not contain package google.golang.org/grpc/naming

這樣的錯誤,可以在go.mod文件增加:

replace google.golang.org/grpc => google.golang.org/grpc v1.21.1

以上就是go學習筆記讀取consul配置文件詳解的詳細內容,更多關于go讀取consul配置文件的資料請關注腳本之家其它相關文章!

相關文章

  • golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn)

    golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn)

    這篇文章給大家介紹了golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn),文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    Windows下在CMD下執(zhí)行Go出現(xiàn)中文亂碼的解決方法

    在cmd下運行go程序或者是GOLAND的Terminal下運行go程序會出現(xiàn)中文亂碼的情況。本文就詳細的介紹下解決方法,具有一定的參考價值,感興趣的可以了解一下
    2021-12-12
  • Go框架自動化工具Beego使用詳解

    Go框架自動化工具Beego使用詳解

    這篇文章主要為大家介紹了Go框架自動化工具Beego使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 如何go語言比較兩個對象是否深度相同

    如何go語言比較兩個對象是否深度相同

    這篇文章主要介紹了如何go語言比較兩個對象是否深度相同,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • GoLang基礎學習之go?test測試

    GoLang基礎學習之go?test測試

    相信每位編程開發(fā)者們應該都知道,Golang作為一門標榜工程化的語言,提供了非常簡便、實用的編寫單元測試的能力,下面這篇文章主要給大家介紹了關于GoLang基礎學習之go?test測試的相關資料,需要的朋友可以參考下
    2022-08-08
  • golang中定時器cpu使用率高的現(xiàn)象詳析

    golang中定時器cpu使用率高的現(xiàn)象詳析

    這篇文章主要給大家介紹了關于golang中定時器cpu使用率高的現(xiàn)象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • Golang中的信號(Signal)機制詳解

    Golang中的信號(Signal)機制詳解

    Signal 是一種操作系統(tǒng)級別的事件通知機制,進程可以響應特定的系統(tǒng)信號,這些信號用于指示進程執(zhí)行特定的操作,如程序終止、掛起、恢復等,Golang 的標準庫 os/signal 提供了對信號處理的支持,本文將詳細講解 Golang 是如何處理和響應系統(tǒng)信號的,需要的朋友可以參考下
    2024-01-01
  • Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic之避免和處理程序中的異常情況

    Golang中的panic是一種異常處理機制,可以在程序出現(xiàn)異常情況時終止程序并打印錯誤信息。為了避免panic對程序的影響,開發(fā)者可以采用一系列技巧,如defer+recover、編寫可重入的代碼、使用錯誤返回值等。這些技巧可以幫助開發(fā)者優(yōu)雅地處理程序中的異常情況
    2023-04-04
  • go sync Once實現(xiàn)原理示例解析

    go sync Once實現(xiàn)原理示例解析

    這篇文章主要為大家介紹了go sync Once實現(xiàn)原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 簡單對比一下?C語言?與?Go語言

    簡單對比一下?C語言?與?Go語言

    這篇文章主要介紹了簡單對比一下?C語言?與?Go語言的相關資料,需要的朋友可以參考下
    2023-08-08

最新評論