ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
配置文件的实现依赖包: ``` 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`