我們的配置信息,將分為兩個層級:
* 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 基礎
- 命令行模式
- 附錄
- 配置參考
- 第三方依賴庫