go使用Viper管理配置文件的方法步驟
前言
在項(xiàng)目開發(fā)中,需要把一些配置配置提取出來,方便配置和管理,可以使用Viper工具,Viper 是 Go 應(yīng)用程序的完整配置解決方案,也支持從環(huán)境變量中讀取
viper使用
viper倉庫為
https://github.com/spf13/viper?tab=readme-ov-file
viper依賴安裝
使用以下命令安裝viper依賴
go get github.com/spf13/viper
viper使用
(1)定義一個(gè)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")
// 如果配置文件的名稱中沒有擴(kuò)展名,則需要配置此項(xiàng)
viperConfig.SetConfigType("yml")
// 配置文件名稱(無擴(kuò)展名)
viperConfig.SetConfigName("app")
if err := viperConfig.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
// 配置文件未找到錯(cuò)誤;如果需要可以忽略
log.Println("配置文件沒找到")
} else {
// 配置文件被找到,但產(chǎn)生了另外的錯(cuò)誤
log.Println("讀取文件異常:", err)
}
}
var user User
err := viperConfig.Unmarshal(&user)
log.Println(user)
log.Println("解析異常:", err)
}
將配置文件轉(zhuǎn)為對(duì)象,輸出結(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")
// 如果配置文件的名稱中沒有擴(kuò)展名,則需要配置此項(xiàng)
viperConfig.SetConfigType("yml")
// 配置文件名稱(無擴(kuò)展名)
viperConfig.SetConfigName("app")
if err := viperConfig.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
// 配置文件未找到錯(cuò)誤;如果需要可以忽略
log.Println("配置文件沒找到")
} else {
// 配置文件被找到,但產(chǎn)生了另外的錯(cuò)誤
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是一個(gè)強(qiáng)大的工具類庫,可以使用其管理項(xiàng)目中的配置文件,不過go也有其他配置文件,根據(jù)自己上手程序和熟練程度而定
以上就是go使用Viper管理配置文件的方法步驟的詳細(xì)內(nèi)容,更多關(guān)于go Viper管理配置文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
gin解析json格式的數(shù)據(jù)出錯(cuò)的處理方案
這篇文章主要介紹了gin解析json格式的數(shù)據(jù)出錯(cuò)的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用
本文主要介紹了Go語言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Golang?Gin框架獲取請(qǐng)求參數(shù)的幾種常見方式
在我們平常添加路由處理函數(shù)之后,就可以在路由處理函數(shù)中編寫業(yè)務(wù)處理代碼了,但在此之前我們往往需要獲取請(qǐng)求參數(shù),本文就詳細(xì)的講解下gin獲取請(qǐng)求參數(shù)常見的幾種方式,需要的朋友可以參考下2024-02-02
使用Go語言封裝實(shí)現(xiàn)郵件發(fā)送功能
在現(xiàn)代 Web 開發(fā)中,郵件發(fā)送功能是一個(gè)常見的需求,本文將介紹如何在 Go 語言中封裝一個(gè)通用的郵件發(fā)送包,支持驗(yàn)證碼發(fā)送和通用郵件發(fā)送,需要的可以參考下2025-03-03
利用Go Plugin實(shí)現(xiàn)插件化編程的簡(jiǎn)單方法
Golang官方提供了plugin模塊,該模塊可以支持插件開,下面這篇文章主要給大家介紹了關(guān)于如何利用Go Plugin實(shí)現(xiàn)插件化編程的相關(guān)資料,需要的朋友可以參考下2021-10-10
對(duì)Golang中的runtime.Caller使用說明
這篇文章主要介紹了對(duì)Golang中的runtime.Caller使用說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Go語言sync鎖與對(duì)象池的實(shí)現(xiàn)
本文介紹了Go語言標(biāo)準(zhǔn)庫sync包提供的并發(fā)控制工具,主要包括互斥鎖(sync.Mutex)和讀寫鎖(sync.RWMutex)兩類同步機(jī)制,下面就來具體介紹一下這兩個(gè)的使用,感興趣的可以了解一下2025-08-08
Go語言設(shè)計(jì)實(shí)現(xiàn)在任務(wù)欄里提醒你喝水的兔子
這篇文章主要為大家介紹了Go語言設(shè)計(jì)實(shí)現(xiàn)在任務(wù)欄里提醒你喝水的兔子示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

