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

目录
相关文章
|
3月前
|
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.
185 0
|
3月前
|
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
1743 0
|
3月前
|
监控 算法 Go
Golang深入浅出之-Go语言中的服务熔断、降级与限流策略
【5月更文挑战第4天】本文探讨了分布式系统中保障稳定性的重要策略:服务熔断、降级和限流。服务熔断通过快速失败和暂停故障服务调用来保护系统;服务降级在压力大时提供有限功能以保持整体可用性;限流控制访问频率,防止过载。文中列举了常见问题、解决方案,并提供了Go语言实现示例。合理应用这些策略能增强系统韧性和可用性。
218 0
|
5天前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
26天前
|
测试技术 Shell Go
Golang质量生态建设问题之Go语言的单元测试的问题如何解决
Golang质量生态建设问题之Go语言的单元测试的问题如何解决
|
3月前
|
前端开发 Go
Golang深入浅出之-Go语言中的异步编程与Future/Promise模式
【5月更文挑战第3天】Go语言通过goroutines和channels实现异步编程,虽无内置Future/Promise,但可借助其特性模拟。本文探讨了如何使用channel实现Future模式,提供了异步获取URL内容长度的示例,并警示了Channel泄漏、错误处理和并发控制等常见问题。为避免这些问题,建议显式关闭channel、使用context.Context、并发控制机制及有效传播错误。理解并应用这些技巧能提升Go语言异步编程的效率和健壮性。
160 5
Golang深入浅出之-Go语言中的异步编程与Future/Promise模式
|
3月前
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
191 5
|
3月前
|
监控 负载均衡 算法
Golang深入浅出之-Go语言中的协程池设计与实现
【5月更文挑战第3天】本文探讨了Go语言中的协程池设计,用于管理goroutine并优化并发性能。协程池通过限制同时运行的goroutine数量防止资源耗尽,包括任务队列和工作协程两部分。基本实现思路涉及使用channel作为任务队列,固定数量的工作协程处理任务。文章还列举了一个简单的协程池实现示例,并讨论了常见问题如任务队列溢出、协程泄露和任务调度不均,提出了解决方案。通过合理设置缓冲区大小、确保资源释放、优化任务调度以及监控与调试,可以避免这些问题,提升系统性能和稳定性。
99 6