配置文件的实现依赖包:
```
go get github.com/spf13/cast
```
这个已经默认集成到项目中,我们可以在`*pkg/config/config.go*`文件中查看详细的配置信息。
## 初始化配置
在`main.go`中的 `init()`实现配置的初始化
```go
import btsConfig "gohub/config"
func init() {
// 加载 config 目录下的配置信息
btsConfig.Initialize()
}
```
作为一个`Go`中的`init`函数有以下逻辑:
* 如果一个包定义了 `init` 函数,`Go` 运行时会负责在该包初始化时调用它的 init 函数;
* `init` 不能被显式调用 ,否则会在编译期间报错;
* 多个包的情况,在初始化该包时,`Go` 运行时会按照一定的次序逐一顺序地调用该包的 `init` 函数;
* 每个 `init` 函数在整个 `Go` 程序生命周期内仅会被执行一次;
* 一般来说,先被传递给 `Go` 编译器的源文件中的 `init` 函数先被执行(`main.go` 作为起点);
* 同一个源文件中的多个` init` 函数按声明顺序依次执行。
下面一张图很好了说明了这个执行逻辑:
![](https://img.kancloud.cn/e8/c0/e8c029f2ed9d600770eefea709fd190b_948x419.png)
更加简单的说:
1. 如果一个包导入了其他包,则首先初始化导入的包。
2. 然后初始化当前包的常量。
3. 接下来初始化当前包的变量。
4. 最后,调用当前包的`init()`函数。
## 环境配置场景
一般来讲,项目会运行在多个环境下,例如:
* local —— 本地开发环境(我的机器上、其他开发同事的机器上)
* testing —— 自动化测试环境
* stage —— 接近线上环境的测试环境,方便其他成员访问和测试(编辑人员、产品经理、项目经理)
* production —— 线上生产环境
启动示例: `./gohub serve --env=local`
- 序言
- 基础
- 安装GoHub
- 目录结构
- 开发规范
- 部署项目
- 架构
- 架构总览
- 生命周期
- 配置
- 配置介绍
- 配置目录
- 配置格式
- 配置加载
- 读取配置
- 动态配置
- 环境变量配置
- 路由
- 路由模式
- 路由定义
- 路由参数
- 路由分组
- 路由限流
- 路由拆分
- 控制器
- 控制定义
- 控制器初始化
- 中间件
- Make创建控制器
- 请求
- 请求信息
- 数据库
- 连接数据库
- 基本使用
- Make创建模型
- 日志
- 介绍
- 日志驱动
- 日志写入
- HTTP日志
- 数据库请求日志
- 错误和调试
- Debuger调试器
- 验证
- 验证器
- 验证规则
- Make创建验证器
- 杂项
- 缓存
- 分页
- 验证码
- CURL请求
- 命令行
- 基础知识
- console 包
- Cobra 基础
- 命令行模式
- 附录
- 配置参考
- 第三方依赖库