Golang读取配置文件实现(yaml)

简介: Golang读取配置文件实现(yaml)

目录准备


在项目根目录新建config配置文件目录,同时创建一个yaml格式的配置文件config.yaml,写入一些测试数据

env:
  lang: golang
  system: win10
author: lauwen
apiTokenKey: Z2luLWNsaTIwMjEwNQ==
apiTokenExpireTime: 1440
apiTokenRebuildTime: 100

image.png

读取实现


安装

读取配置文件这里使用到spf13/viper这个库,先安装

go get -u github.com/spf13/viper

读取键值格式

[配置文件名].[yaml文件具体配置],例如confing.yaml文件下env.lang配置,传递时写为config.env.lang

获取文件名filename和要获取的键名key

index := strings.Index(fileKey, ".")
fileName := fileKey[0:index]
key := fileKey[index+1:]

viper读取

// 初始化viper
viper := viper2.New()
// 设置配置文件名,即上一步提取的
viper.SetConfigName(fileName)
// 设置配置文件格式
viper.SetConfigType("yaml")
// 设置配置文件所在目录,这里固定为config,可以根据需要更改
viper.AddConfigPath("config")

具体实现代码

package config
import (
  viper2 "github.com/spf13/viper"
  "strings"
)
func Get(fileKey string) interface{}  {
  index := strings.Index(fileKey, ".")
  fileName := fileKey[0:index]
  key := fileKey[index+1:]
  viper := viper2.New()
  viper.SetConfigName(fileName)
  viper.SetConfigType("yaml")
  viper.AddConfigPath("config")
  if err := viper.ReadInConfig(); err != nil {
    panic(err.Error())
  }
  return viper.Get(key)
}

调用


config.Get("config.env.lang")

image.png

目录
相关文章
|
6月前
|
Go
golang使用Viper 库修改yaml的值
看起来你正在使用 Viper 库(可能是 Go 语言中的一个配置管理库),并且希望读取一个配置文件、修改其内容,然后保存为另一个文件。以下是一个简单的示例代码,演示了如何使用 Viper 完成这些任务: ```go package main import ( "fmt" "github.com/spf13/viper" ) func main() { // 设置配置文件路径 viper.SetConfigFile("/root/mongo.conf") // 读取配置文件 err := viper.ReadInConfig() if err != nil { fmt.
250 0
|
6月前
|
Go
golang 使用 viper 打印yaml 的值
如果你想指定配置文件路径、读取配置文件并打印所有的键和值,可以使用以下代码: ```go package main import ( "fmt" "github.com/spf13/viper" ) func main() { // 指定配置文件路径 configFilePath := "/root/mongo.conf" viper.SetConfigFile(configFilePath) // 读取配置文件 err := viper.ReadInConfig() if err != nil { fmt.Printf("Error reading config
|
XML 存储 JSON
使用golang解析yaml、json、xml文件
使用golang解析yaml、json、xml文件
|
JSON Prometheus Cloud Native
Grabana:使用 Golang 或 Yaml 生成 Grafana Dashboard
使用 Golang 或 Yaml 生成 Grafana Dashboard
1784 0
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
111 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4
|
2月前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
46 3
|
2月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
50 4
Golang语言goroutine协程篇