go使用Viper管理配置文件的方法步骤

 更新时间:2024年07月22日 08:38:00   作者:考虑考虑  
在项目开发中,需要把一些配置配置提取出来,方便配置和管理,可以使用Viper工具,Viper 是 Go 应用程序的完整配置解决方案,也支持从环境变量中读取,本文给大家介绍了go使用Viper管理配置文件的方法步骤,需要的朋友可以参考下

前言

在项目开发中,需要把一些配置配置提取出来,方便配置和管理,可以使用Viper工具,Viper 是 Go 应用程序的完整配置解决方案,也支持从环境变量中读取

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 {
          // 配置文件被找到,但产生了另外的错误
          log.Println("读取文件异常:", err)
       }
    }
    var user User
    err := viperConfig.Unmarshal(&user)
    log.Println(user)
    log.Println("解析异常:", err)

}

将配置文件转为对象,输出结果为

(3)也可以不将配置文件转换成类,直接使用键值取值

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 {
          // 配置文件被找到,但产生了另外的错误
          log.Println("读取文件异常:", err)
       }
    }
    log.Println("值为:", viperConfig.Get("app.name"))
    log.Println("值为:", viperConfig.Get("app.config"))

}

输出结果为

viper写入文件

在开发过程中,我们如果要利用viper写入文件,可以使用

package main

import "github.com/spf13/viper"


func main() {
    viper.Set("app.test", "aaa1")
    //viper.WriteConfig()
    viper.WriteConfigAs("./config/app.yaml")

}

总结

viper是一个强大的工具类库,可以使用其管理项目中的配置文件,不过go也有其他配置文件,根据自己上手程序和熟练程度而定

以上就是go使用Viper管理配置文件的方法步骤的详细内容,更多关于go Viper管理配置文件的资料请关注脚本之家其它相关文章!

相关文章

  • gin解析json格式的数据出错的处理方案

    gin解析json格式的数据出错的处理方案

    这篇文章主要介绍了gin解析json格式的数据出错的处理方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Go语言反射reflect.Value实现方法的调用

    Go语言反射reflect.Value实现方法的调用

    本文主要介绍了Go语言反射reflect.Value实现方法的调用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Golang Gin框架获取请求参数的几种常见方式

    Golang Gin框架获取请求参数的几种常见方式

    在我们平常添加路由处理函数之后,就可以在路由处理函数中编写业务处理代码了,但在此之前我们往往需要获取请求参数,本文就详细的讲解下gin获取请求参数常见的几种方式,需要的朋友可以参考下
    2024-02-02
  • 使用Go语言封装实现邮件发送功能

    使用Go语言封装实现邮件发送功能

    在现代 Web 开发中,邮件发送功能是一个常见的需求,本文将介绍如何在 Go 语言中封装一个通用的邮件发送包,支持验证码发送和通用邮件发送,需要的可以参考下
    2025-03-03
  • 深入理解Go中的项目代码布局

    深入理解Go中的项目代码布局

    Go 语言的创世项目其实就是 Go 语言项目自身,是全世界第一个 Go 语言项目,本文主要来和大家详细介绍一下Go中的项目代码布局,需要的可以了解下
    2023-11-11
  • Go语言利用net/mail包解析邮件地址与消息格式

    Go语言利用net/mail包解析邮件地址与消息格式

    Go 的 net/mail 包提供了符合 RFC 5322 标准的邮件解析能力,让你轻松处理邮件相关的各种场景,下面就跟随小编一起来深入了解下具体实现吧
    2025-08-08
  • 利用Go Plugin实现插件化编程的简单方法

    利用Go Plugin实现插件化编程的简单方法

    Golang官方提供了plugin模块,该模块可以支持插件开,下面这篇文章主要给大家介绍了关于如何利用Go Plugin实现插件化编程的相关资料,需要的朋友可以参考下
    2021-10-10
  • 对Golang中的runtime.Caller使用说明

    对Golang中的runtime.Caller使用说明

    这篇文章主要介绍了对Golang中的runtime.Caller使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言sync锁与对象池的实现

    Go语言sync锁与对象池的实现

    本文介绍了Go语言标准库sync包提供的并发控制工具,主要包括互斥锁(sync.Mutex)和读写锁(sync.RWMutex)两类同步机制,下面就来具体介绍一下这两个的使用,感兴趣的可以了解一下
    2025-08-08
  • Go语言设计实现在任务栏里提醒你喝水的兔子

    Go语言设计实现在任务栏里提醒你喝水的兔子

    这篇文章主要为大家介绍了Go语言设计实现在任务栏里提醒你喝水的兔子示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论