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

golang讀取yaml配置文件的方法實(shí)現(xiàn)

 更新時(shí)間:2024年10月25日 09:45:26   作者:code:404-not-found  
本文主要介紹了golang讀取yaml配置文件的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Viper

Viper是適用于Go應(yīng)用程序的完整配置解決方案。它被設(shè)計(jì)用于在應(yīng)用程序中工作,并且可以處理所有類型的配置需求和格式。它支持以下特性:

  • 設(shè)置默認(rèn)值
  • 從JSON、TOML、YAML、HCL、envfile和Java properties 格式的配置文件讀取配置信息
  • 實(shí)時(shí)監(jiān)控和重新讀取配置文件(可選)
  • 從環(huán)境變量中讀取
  • 從遠(yuǎn)程配置系統(tǒng)(etcd或Consul)讀取并監(jiān)控配置變化
  • 從命令行參數(shù)讀取配置
  • 從buffer讀取配置
  • 顯式配置值

安裝

go get github.com/spf13/viper

使用

在項(xiàng)目根目錄創(chuàng)建config文件夾,在文件夾中創(chuàng)建local.yaml

servername: 'myserver'

mysql:
  name: 'mysql'

在main.go中讀取配置文件的信息

package main

import (
	"log"

	"github.com/spf13/viper"
)

func main() {
	v := viper.New()

	// 設(shè)置文件名稱
	v.SetConfigFile("./config/local.yaml")

	if err := v.ReadInConfig(); err != nil {
		log.Panicln("讀取配置文件失敗")
	}

	servername := v.Get("servername")
	mysql := v.Get("mysql.name")
	log.Println(servername, mysql)
}

使用結(jié)構(gòu)體映射yaml

修改配置文件

name: '服務(wù)名'
port: 8080

使用

package main

import (
	"log"

	"github.com/spf13/viper"
)

type ServerConfig struct {
	Name string `mapstructure:"name"`
	Port int    `mapstructure:"port"`
}

func main() {

	cfg := ServerConfig{}
	v := viper.New()

	// 設(shè)置文件名稱
	v.SetConfigFile("./config/local.yaml")

	if err := v.ReadInConfig(); err != nil {
		log.Panicln("讀取配置文件失敗")
	}

	if err := v.Unmarshal(&cfg); err != nil {
		log.Panicln(err)
	}

	log.Println(cfg)
}

輸出

{服務(wù)名 8080}

結(jié)構(gòu)體嵌套讀取配置

配置文件

name: '服務(wù)名'
port: 8080
mysql: 
  host: '127.0.0.1'
  port: 3306

讀取配置

package main

import (
	"log"

	"github.com/spf13/viper"
)

type ServerConfig struct {
	Name        string      `mapstructure:"name"`
	Port        int         `mapstructure:"port"`
	MysqlConfig MysqlConfig `mapstructure:"mysql"` // 嵌套的配置
}

type MysqlConfig struct {
	Host string `mapstructure:"host"`
	Port int    `mapstructure:"port"`
}

func main() {

	cfg := ServerConfig{}
	v := viper.New()

	// 設(shè)置文件名稱
	v.SetConfigFile("./config/local.yaml")

	if err := v.ReadInConfig(); err != nil {
		log.Panicln("讀取配置文件失敗")
	}

	if err := v.Unmarshal(&cfg); err != nil {
		log.Panicln(err)
	}

	log.Println(cfg)
}

輸出

{服務(wù)名 8080 {127.0.0.1 3306}}

根據(jù)不同環(huán)境讀取不同配置文件

在實(shí)際開(kāi)發(fā)工作中,一般有不同的開(kāi)發(fā)環(huán)境,會(huì)涉及到讀取不同的配置文件

這會(huì)運(yùn)用的golang的flag包

package main

import (
	"flag"
	"log"
)


func main() {

	env := flag.String("env", "local", "運(yùn)行環(huán)境請(qǐng)輸入local dev test prod")
	flag.Parse()

	log.Println("當(dāng)前環(huán)境是" + *env)

}

運(yùn)行

go run .\main.go -help

輸出

-env string
運(yùn)行環(huán)境請(qǐng)輸入local dev test prod (default "local")

這樣的話運(yùn)行

go run .\main.go -env dev

輸出

當(dāng)前環(huán)境是dev

利用flag讀取不同環(huán)境的配置文件

在項(xiàng)目更目錄新建config文件夾

并創(chuàng)建4個(gè)配置文件 local.yaml dev.yaml test.yaml prod.yaml

其中dev.yaml中

name: 'dev服務(wù)名'
port: 8080
mysql: 
  host: '127.0.0.1'
  port: 3306

在main.go中

package main

import (
	"flag"
	"fmt"
	"log"

	"github.com/spf13/viper"
)

type ServerConfig struct {
	Name        string      `mapstructure:"name"`
	Port        int         `mapstructure:"port"`
	MysqlConfig MysqlConfig `mapstructure:"mysql"` // 嵌套的配置
}

type MysqlConfig struct {
	Host string `mapstructure:"host"`
	Port int    `mapstructure:"port"`
}

func main() {

	env := flag.String("env", "local", "運(yùn)行環(huán)境請(qǐng)輸入local dev test prod")
	flag.Parse()

	log.Println("當(dāng)前環(huán)境是" + *env)

	cfg := ServerConfig{}
	v := viper.New()
	var path string = fmt.Sprintf("./config/%s.yaml", *env)
	// 設(shè)置文件名稱
	v.SetConfigFile(path)

	if err := v.ReadInConfig(); err != nil {
		log.Panicln("讀取配置文件失敗")
	}

	if err := v.Unmarshal(&cfg); err != nil {
		log.Panicln(err)
	}

	log.Println(cfg)
}

運(yùn)行

go run .\main.go -env dev

輸出

當(dāng)前環(huán)境是dev
{dev服務(wù)名 8080 {127.0.0.1 3306}}

到此這篇關(guān)于golang讀取yaml配置文件的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)golang讀取yaml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go mod 依賴管理的具體使用

    go mod 依賴管理的具體使用

    在Go語(yǔ)言開(kāi)發(fā)中,依賴管理是一項(xiàng)非常重要的工作,Go mod作為官方的包管理工具已經(jīng)成為了Go語(yǔ)言依賴管理的首選方式,本文就來(lái)介紹一下go mod 依賴管理的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • GoLang中panic和recover作用詳解

    GoLang中panic和recover作用詳解

    panic?和?recover?是?Go?語(yǔ)言中用于處理異常和錯(cuò)誤的機(jī)制,能夠幫助我們應(yīng)對(duì)意外情況并使程序更加健壯,這篇文章主要介紹了GoLang中panic和recover作用詳解,需要的朋友可以參考下
    2024-05-05
  • Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn)

    Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn)

    本文主要介紹了Golang應(yīng)用執(zhí)行Shell命令實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go語(yǔ)言中:= 運(yùn)算符短變量聲明的使用小結(jié)

    Go語(yǔ)言中:= 運(yùn)算符短變量聲明的使用小結(jié)

    本文全面解析Go語(yǔ)言特有的:=運(yùn)算符,該運(yùn)算符兼具變量聲明和初始化功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Go疑難雜癥講解之為什么nil不等于nil

    Go疑難雜癥講解之為什么nil不等于nil

    在日常開(kāi)發(fā)中,可能一不小心就會(huì)掉進(jìn)?Go?語(yǔ)言的某些陷阱里,而本文要介紹的?nil?≠?nil?問(wèn)題,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-10-10
  • 一文詳解Go語(yǔ)言單元測(cè)試的原理與使用

    一文詳解Go語(yǔ)言單元測(cè)試的原理與使用

    Go語(yǔ)言中自帶有一個(gè)輕量級(jí)的測(cè)試框架testing和自帶的go?test命令來(lái)實(shí)現(xiàn)單元測(cè)試和性能測(cè)試。本文將通過(guò)示例詳細(xì)聊聊Go語(yǔ)言單元測(cè)試的原理與使用,需要的可以參考一下
    2022-09-09
  • golang實(shí)現(xiàn)命令行程序的使用幫助功能

    golang實(shí)現(xiàn)命令行程序的使用幫助功能

    這篇文章介紹了golang實(shí)現(xiàn)命令行程序使用幫助的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作

    使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作

    這篇文章主要介紹了使用golang實(shí)現(xiàn)在屏幕上打印進(jìn)度條的操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Go語(yǔ)言使用sqlx操作MySQL

    Go語(yǔ)言使用sqlx操作MySQL

    sqlx 包作為一個(gè)擴(kuò)展庫(kù),它在 database/sql 的基礎(chǔ)上,提供了更高級(jí)別的便利,極大地簡(jiǎn)化了數(shù)據(jù)庫(kù)操作,本文章將介紹如何通過(guò)sqlx包來(lái)操作 MySQL 數(shù)據(jù)庫(kù),感興趣的可以了解下
    2024-11-11
  • 詳解Go strconv包

    詳解Go strconv包

    Go語(yǔ)言中strconv包實(shí)現(xiàn)了基本數(shù)據(jù)類型和其字符串表示的相互轉(zhuǎn)換。這篇文章主要介紹了Go strconv包的相關(guān)知識(shí),需要的朋友可以參考下
    2020-10-10

最新評(píng)論

宽甸| 即墨市| 金堂县| 堆龙德庆县| 息烽县| 睢宁县| 施甸县| 宜兰市| 广德县| 岱山县| 东源县| 仁化县| 左贡县| 沁水县| 陵川县| 紫阳县| 广平县| 高尔夫| 伊金霍洛旗| 沙河市| 天等县| 普兰店市| 固安县| 定州市| 万源市| 雅江县| 罗山县| 若羌县| 大方县| 廊坊市| 鹤山市| 西乌| 晋宁县| 扎鲁特旗| 镇原县| 汉寿县| 乌鲁木齐市| 镇雄县| 紫阳县| 育儿| 遂平县|