go使用Viper管理配置文件的方法步驟
前言
在項目開發(fā)中,需要把一些配置配置提取出來,方便配置和管理,可以使用Viper工具,Viper 是 Go 應用程序的完整配置解決方案,也支持從環(huán)境變量中讀取
viper使用
viper倉庫為
https://github.com/spf13/viper?tab=readme-ov-file
viper依賴安裝
使用以下命令安裝viper依賴
go get github.com/spf13/viper
viper使用
(1)定義一個yaml配置文件,如
app: name: hello config: 1
放在config文件下

(2)程序讀取配置文件,使用程序
package main
import (
"github.com/spf13/viper"
"log"
)
type App struct {
Name string
Config int64
}
type User struct {
App App
}
func main() {
viperConfig := viper.New()
// 查找配置文件所在的路徑
viperConfig.AddConfigPath("./config")
// 如果配置文件的名稱中沒有擴展名,則需要配置此項
viperConfig.SetConfigType("yml")
// 配置文件名稱(無擴展名)
viperConfig.SetConfigName("app")
if err := viperConfig.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
// 配置文件未找到錯誤;如果需要可以忽略
log.Println("配置文件沒找到")
} else {
// 配置文件被找到,但產(chǎn)生了另外的錯誤
log.Println("讀取文件異常:", err)
}
}
var user User
err := viperConfig.Unmarshal(&user)
log.Println(user)
log.Println("解析異常:", err)
}
將配置文件轉(zhuǎn)為對象,輸出結(jié)果為

(3)也可以不將配置文件轉(zhuǎn)換成類,直接使用鍵值取值
package main
import (
"github.com/spf13/viper"
"log"
)
type App struct {
Name string
Config int64
}
type User struct {
App App
}
func main() {
viperConfig := viper.New()
// 查找配置文件所在的路徑
viperConfig.AddConfigPath("./config")
// 如果配置文件的名稱中沒有擴展名,則需要配置此項
viperConfig.SetConfigType("yml")
// 配置文件名稱(無擴展名)
viperConfig.SetConfigName("app")
if err := viperConfig.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
// 配置文件未找到錯誤;如果需要可以忽略
log.Println("配置文件沒找到")
} else {
// 配置文件被找到,但產(chǎn)生了另外的錯誤
log.Println("讀取文件異常:", err)
}
}
log.Println("值為:", viperConfig.Get("app.name"))
log.Println("值為:", viperConfig.Get("app.config"))
}
輸出結(jié)果為

viper寫入文件
在開發(fā)過程中,我們?nèi)绻胿iper寫入文件,可以使用
package main
import "github.com/spf13/viper"
func main() {
viper.Set("app.test", "aaa1")
//viper.WriteConfig()
viper.WriteConfigAs("./config/app.yaml")
}


總結(jié)
viper是一個強大的工具類庫,可以使用其管理項目中的配置文件,不過go也有其他配置文件,根據(jù)自己上手程序和熟練程度而定
以上就是go使用Viper管理配置文件的方法步驟的詳細內(nèi)容,更多關于go Viper管理配置文件的資料請關注腳本之家其它相關文章!
相關文章
Golang優(yōu)雅保持main函數(shù)不退出的辦法
很多時候我們需要讓main函數(shù)不退出,讓它在后臺一直執(zhí)行,下面這篇文章主要給大家介紹了關于Golang優(yōu)雅保持main函數(shù)不退出的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07
golang并發(fā)編程中Goroutine 協(xié)程的實現(xiàn)
Go語言中的協(xié)程是一種輕量級線程,通過在函數(shù)前加go關鍵字來并發(fā)執(zhí)行,具有動態(tài)棧、快速啟動和低內(nèi)存使用等特點,本文就來詳細的介紹一下,感興趣的可以了解一下2024-10-10
Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡單例子
這篇文章主要介紹了Go語言中轉(zhuǎn)換JSON數(shù)據(jù)簡單例子,本文先定義了一個結(jié)構體,然后把JSON綁定到結(jié)構體上實現(xiàn)讀取,需要的朋友可以參考下2014-10-10
Go并發(fā)原語之SingleFlight請求合并方法實例
本文我們來學習一下 Go 語言的擴展并發(fā)原語:SingleFlight,SingleFlight 的作用是將并發(fā)請求合并成一個請求,以減少重復的進程來優(yōu)化 Go 代碼2023-12-12

