💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
我们的配置信息,将分为两个层级: * 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**文件,用以在本地环境中调试线上的第三方服务配置信息(短信、邮件) * …