golang讀取yaml配置文件的方法實現(xiàn)
Viper
Viper是適用于Go應用程序的完整配置解決方案。它被設計用于在應用程序中工作,并且可以處理所有類型的配置需求和格式。它支持以下特性:
- 設置默認值
- 從JSON、TOML、YAML、HCL、envfile和Java properties 格式的配置文件讀取配置信息
- 實時監(jiān)控和重新讀取配置文件(可選)
- 從環(huán)境變量中讀取
- 從遠程配置系統(tǒng)(etcd或Consul)讀取并監(jiān)控配置變化
- 從命令行參數(shù)讀取配置
- 從buffer讀取配置
- 顯式配置值
安裝
go get github.com/spf13/viper
使用
在項目根目錄創(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() // 設置文件名稱 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) }
使用結構體映射yaml
修改配置文件
name: '服務名' 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() // 設置文件名稱 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) }
輸出
{服務名 8080}
結構體嵌套讀取配置
配置文件
name: '服務名' 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() // 設置文件名稱 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) }
輸出
{服務名 8080 {127.0.0.1 3306}}
根據(jù)不同環(huán)境讀取不同配置文件
在實際開發(fā)工作中,一般有不同的開發(fā)環(huán)境,會涉及到讀取不同的配置文件
這會運用的golang的flag包
package main import ( "flag" "log" ) func main() { env := flag.String("env", "local", "運行環(huán)境請輸入local dev test prod") flag.Parse() log.Println("當前環(huán)境是" + *env) }
運行
go run .\main.go -help
輸出
-env string
運行環(huán)境請輸入local dev test prod (default "local")
這樣的話運行
go run .\main.go -env dev
輸出
當前環(huán)境是dev
利用flag讀取不同環(huán)境的配置文件
在項目更目錄新建config文件夾
并創(chuàng)建4個配置文件 local.yaml dev.yaml test.yaml prod.yaml
其中dev.yaml中
name: 'dev服務名' 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", "運行環(huán)境請輸入local dev test prod") flag.Parse() log.Println("當前環(huán)境是" + *env) cfg := ServerConfig{} v := viper.New() var path string = fmt.Sprintf("./config/%s.yaml", *env) // 設置文件名稱 v.SetConfigFile(path) if err := v.ReadInConfig(); err != nil { log.Panicln("讀取配置文件失敗") } if err := v.Unmarshal(&cfg); err != nil { log.Panicln(err) } log.Println(cfg) }
運行
go run .\main.go -env dev
輸出
當前環(huán)境是dev
{dev服務名 8080 {127.0.0.1 3306}}
到此這篇關于golang讀取yaml配置文件的方法實現(xiàn)的文章就介紹到這了,更多相關golang讀取yaml內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
golang如何用type-switch判斷interface變量的實際存儲類型
這篇文章主要介紹了golang如何用type-switch判斷interface變量的實際存儲類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04利用ChatGPT編寫一個Golang圖像壓縮函數(shù)
這篇文章主要為大家詳細介紹了如何利用ChatGPT幫我們寫了一個Golang圖像壓縮函數(shù),文中的示例代碼簡潔易懂,感興趣的小伙伴可以嘗試一下2023-04-04