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管理配置文件的资料请关注脚本之家其它相关文章!

相关文章

  • Go 实现英尺和米的简单单位换算方式

    Go 实现英尺和米的简单单位换算方式

    这篇文章主要介绍了Go 实现英尺和米的简单单位换算方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解golang RWMutex读写互斥锁源码分析

    详解golang RWMutex读写互斥锁源码分析

    这篇文章主要介绍了详解golang RWMutex读写互斥锁源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Golang优雅保持main函数不退出的办法

    Golang优雅保持main函数不退出的办法

    很多时候我们需要让main函数不退出,让它在后台一直执行,下面这篇文章主要给大家介绍了关于Golang优雅保持main函数不退出的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • golang并发编程中Goroutine 协程的实现

    golang并发编程中Goroutine 协程的实现

    Go语言中的协程是一种轻量级线程,通过在函数前加go关键字来并发执行,具有动态栈、快速启动和低内存使用等特点,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-10-10
  • Go语言中转换JSON数据简单例子

    Go语言中转换JSON数据简单例子

    这篇文章主要介绍了Go语言中转换JSON数据简单例子,本文先定义了一个结构体,然后把JSON绑定到结构体上实现读取,需要的朋友可以参考下
    2014-10-10
  • Go语言fmt.Sprintf格式化输出的语法与实例

    Go语言fmt.Sprintf格式化输出的语法与实例

    Go 可以使用 fmt.Sprintf 来格式化字符串,下面这篇文章主要给大家介绍了关于Go语言fmt.Sprintf格式化输出的语法与实例,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Golang接口使用教程详解

    Golang接口使用教程详解

    在 Go 语言中接口包含两种含义:它既是方法的集合, 同时还是一种类型并且在Go 语言中是隐式实现的。本文通过示例详细介绍了Golang接口的使用,需要的可以参考一下
    2022-09-09
  • Go语言做爬虫状态码返回418的问题解决

    Go语言做爬虫状态码返回418的问题解决

    在使用Go语言做爬虫时,使用http.Get(url)去获取网页内容,状态码返回404,本文我们就详细的介绍一下解决方法,感兴趣的可以了解一下
    2021-12-12
  • Go并发原语之SingleFlight请求合并方法实例

    Go并发原语之SingleFlight请求合并方法实例

    本文我们来学习一下 Go 语言的扩展并发原语:SingleFlight,SingleFlight 的作用是将并发请求合并成一个请求,以减少重复的进程来优化 Go 代码
    2023-12-12
  • go语言异常panic和恢复recover用法实例

    go语言异常panic和恢复recover用法实例

    这篇文章主要介绍了go语言异常panic和恢复recover用法,实例分析了异常panic和恢复recover使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03

最新评论