我们的配置信息,将分为两个层级:
* env
* config
接下来我们分别讲解。
### .env
一般来讲,项目会运行在多个环境下,例如:
* `local` —— 本地开发环境(我的机器上、其他开发同事的机器上)
* `testing` —— 自动化测试环境
* `stage` —— 接近线上环境的测试环境,方便其他成员访问和测试(编辑人员、产品经理、项目经理)
* `production` —— 线上生产环境
不同的环境下,我们将使用不同的配置。例如 `local` 环境里,发送短信使用的是测试账号,`production` 环境下,我们将使用验证了公司信息的发信账号。
.env 文件里,一般会存放敏感信息,所以**不会将其添加到代码版本库中**。
**那怎么知道 .env 里有哪些配置项呢?**
我们会添加一个 .env.example 文件,配置项放到这里面做占位符,敏感的信息留空,且将此文件提交到版本库中。部署到新项目中时,参考此文件创建一个 .env 文件,对其进行配置即可。
### config
`config` 是将配置信息存放于 `config` 目录下,按照单独的逻辑区分单独的配置文件,例如数据库连接信息存放于 `config/database.go` 文件下。
`config` 里加载 `.env` 里的配置项,且可设置缺省值。
**既然有 .env 文件,为何还要 config 呢?**
`config` 可以提高配置方案灵活度。在 `config` 里,我们可以为每个配置项设置默认值。也可以做一些简单的数学运算,或者调用 Go 函数进行默认值的处理。我们甚至可以为配置项设置一个回调函数。
`config` 文件是要加入代码版本控制器中的,这些代码是固定的。如果要修改一个 `config` 配置项,就修改其对应的 .env 文件中的配置项即可。
### 多个 .env 文件
单独的 .env 的设计,是满足一台机器一套环境变量的需求。**多个 .env 文件是满足一台机器上运行多套环境变量的需求**。
开发时,除了 `local` 环境变量,很多时候还需要 `testing` 测试相关的环境变量,`testing` 的配置有别于 `local` 。例如测试时,一般需要使用`不同的数据库`,这样才能不污染我们的开发数据库。
我们可以利用程序参数,在命令行运行主程序时,传参`--env=testing`的参数,程序接收到这个参数后会读取**.env.testing**文件,而不是`.env`文件。
`--env`的参数不需要限制值,取到以后直接读取对应的文件即可。以下是几个例子:
* `--env=testing`读取**.env.testing**文件,用以在测试环境使用不同的数据库
* `--env=production`读取**.env.production**文件,用以在本地环境中调试线上的第三方服务配置信息(短信、邮件)
* …
- 序言
- 基础
- 安装GoHub
- 目录结构
- 开发规范
- 部署项目
- 架构
- 架构总览
- 生命周期
- 配置
- 配置介绍
- 配置目录
- 配置格式
- 配置加载
- 读取配置
- 动态配置
- 环境变量配置
- 路由
- 路由模式
- 路由定义
- 路由参数
- 路由分组
- 路由限流
- 路由拆分
- 控制器
- 控制定义
- 控制器初始化
- 中间件
- Make创建控制器
- 请求
- 请求信息
- 数据库
- 连接数据库
- 基本使用
- Make创建模型
- 日志
- 介绍
- 日志驱动
- 日志写入
- HTTP日志
- 数据库请求日志
- 错误和调试
- Debuger调试器
- 验证
- 验证器
- 验证规则
- Make创建验证器
- 杂项
- 缓存
- 分页
- 验证码
- CURL请求
- 命令行
- 基础知识
- console 包
- Cobra 基础
- 命令行模式
- 附录
- 配置参考
- 第三方依赖库