【Go】Viper读取配置文件

2024-01-31 09:52
文章标签 读取 go 配置文件 viper

本文主要是介绍【Go】Viper读取配置文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

go get github.com/spf13/viper

1. 设置配置文件的信息

etcd:ip: "192.168.6.106"port: 2379dialTimeout: 3redis:ip: "192.168.6.107"port: 6379password: "root@1028"

2. 读取配置文件的信息

2.1 通过kv的方式
package mainimport ("fmt""github.com/spf13/viper""log"
)func main() {v := viper.New()v.SetConfigName("config")   // 指定配置文件的名称v.SetConfigType("yaml")     // 指定配置文件的类型v.AddConfigPath("./config") // 指定配置文件所在的目录err := v.ReadInConfig() 	// 加载配置文件信息if err != nil {log.Fatal(err)}etcdIP := v.Get("etcd.ip")etcdPort := v.Get("etcd.port")etcdDialTimeout := v.Get("etcd.dialTimeout")fmt.Println(etcdIP, etcdPort, etcdDialTimeout)redisIP := v.Get("redis.ip")redisPort := v.Get("redis.port")redisPassword := v.Get("redis.password")fmt.Println(redisIP, redisPort, redisPassword)
}

在这里插入图片描述

2.2 通过结构体的方式

通过结构体映射配置文件的信息,viper通过mapstructure标签来匹配对应的字段。

package mainimport ("fmt""github.com/spf13/viper""log"
)type Config struct {EtcdConfig  EtcdConfig  `json:"etcd_config" mapstructure:"etcd"`RedisConfig RedisConfig `json:"redis_config" mapstructure:"redis"`
}type EtcdConfig struct {IP          string `json:"ip" mapstructure:"ip"`Port        int    `json:"port" mapstructure:"port"`DialTimeout int    `json:"dial_timeout" mapstructure:"dial_timeout"`
}type RedisConfig struct {IP       string `json:"ip" mapstructure:"ip"`Port     int    `json:"port" mapstructure:"port"`Password string `json:"password" mapstructure:"password"`
}func main() {v := viper.New()v.SetConfigName("config")   // 指定配置文件的名称v.SetConfigType("yaml")     // 指定配置文件的类型v.AddConfigPath("./config") // 指定配置文件所在的目录err := v.ReadInConfig() 	// 加载配置文件信息if err != nil {log.Fatal(err)}var cfg Configif err := v.Unmarshal(&cfg); err != nil {log.Fatal(err)}fmt.Printf("%+v\n", cfg.EtcdConfig)fmt.Printf("%+v\n", cfg.RedisConfig)
}

在这里插入图片描述

这篇关于【Go】Viper读取配置文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663363

相关文章

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

Go Select的实现

select语法总结 select对应的每个case如果有已经准备好的case 则进行chan读写操作;若没有则执行defualt语句;若都没有则阻塞当前goroutine,直到某个chan准备好可读或可写,完成对应的case后退出。 Select的内存布局 了解chanel的实现后对select的语法有个疑问,select如何实现多路复用的,为什么没有在第一个channel操作时阻塞 从而导

Go Channel的实现

channel作为goroutine间通信和同步的重要途径,是Go runtime层实现CSP并发模型重要的成员。在不理解底层实现时,经常在使用中对channe相关语法的表现感到疑惑,尤其是select case的行为。因此在了解channel的应用前先看一眼channel的实现。 Channel内存布局 channel是go的内置类型,它可以被存储到变量中,可以作为函数的参数或返回值,它在r

Go 数组赋值问题

package mainimport "fmt"type Student struct {Name stringAge int}func main() {data := make(map[string]*Student)list := []Student{{Name:"a",Age:1},{Name:"b",Age:2},{Name:"c",Age:3},}// 错误 都指向了最后一个v// a

Go组合

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码 package mainimport ("fmt")type People struct{}type Pe