前言
这是我参与更文挑战的第2天,大家好,我是作曲家种太阳
上一篇,我们学到了基本的目录设计和基本技术选型,也带大家做了一个gin的helloworld的程序
这篇会带你使用viper处理yaml配置文件并集成到gin框架中来~
- 介绍
Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:
- • 设置默认值
- • 从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息
- • 实时监控和重新读取配置文件(可选)
- • 从环境变量中读取
- • 从远程配置系统(etcd或Consul)读取并监控配置变化
- • 从命令行参数读取配置
- • 从buffer读取配置
- • 显式配置值
- 安装
1 | shell复制代码go get github.com/spf13/viper |
- 需求分析
思考下,一个服务需要哪些配置呢?
- 存放日志目录路径(logAddress)
- 服务名称(name)
- 服务端口号(port)
- mysql的端口号(port)和地址(host)
ps:我们暂且先写这么多,后续还需要配置的我们慢慢加
3.数据流向图解
在写代码之前,我们得搞懂到settings-dev.yaml到viper识别,然后在到各个文件中,是怎么个过程
一张图,你就明白了~
3.编写settings-dev.yaml
1 | yaml复制代码# settings-dev.yaml |
4.定义配置的对应的struct
在config/config中编写几个结构体
viper会吧yaml的数据给对应的结构体
1 | go复制代码package config |
ps: 一定要注意 settings-dev.yaml每个字段名称和结构体的tag一一对应!!
5.编写global数据
global的数据主要是把viper的解析出来的数据存储,这样每个go文件都已引用glbal中的配置数据.
在 global/globalVar.go中编写
1 | go复制代码package global |
6.使用Viper处理yaml配置
在 initialize/config中,编写
1 | go复制代码package initialize |
7.使用配置变量
在 main.go中
1 | go复制代码package main |
最后-验证结果环节
启动 main.go
当你发现你在settings-dev.yaml配置端口号,在控制台打印,说明你就成功了~
思考
如何区分线上环境和开发环境的配置呢?
本文转载自: 掘金