配置管理:config.yaml 读取与多环境配置(manifest/config)
引言
任何应用都离不开配置:监听端口、数据库连接、日志目录……GoFrame 把配置管理收敛到 g.Cfg()(v2 门面方法;v1 时代为 g.Config(),v2 迁移说明中有明确说明),默认读取 config.yaml。
概念
- 配置文件:默认文件名
config.yaml。开发时放在manifest/config/下由gf run自动加载;编译部署后则放在可执行文件同目录(官方文档对此有专门说明)。 - 获取配置:
g.Cfg().Get(ctx, "key"),键支持点号层级,如server.address。 - 多环境:官方支持按环境区分配置与配置来源切换(例如通过命令行参数或环境变量指定配置文件路径),具体机制与字段以官方文档 goframe.org 的配置管理章节为准。
代码示例
先看 manifest/config/config.yaml 的常见内容:
server:
address: ":8000"
openapiPath: "/api.json"
swaggerPath: "/swagger"
logger:
level: "all"
stdout: true
database:
default:
type: "mysql"
link: "root:12345678@tcp(127.0.0.1:3306)/demo"
debug: true
程序中读取配置:
package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
ctx := gctx.New()
// 按点号路径读取,返回 *gvar.Var
address, err := g.Cfg().Get(ctx, "server.address")
if err != nil {
panic(err)
}
fmt.Println("server.address =", address.String())
// 带默认值读取:键不存在时返回默认值
level := g.Cfg().MustGet(ctx, "logger.level", "info")
fmt.Println("logger.level =", level.String())
// 读取整段配置并做类型转换(Var 提供 Int/String/Bool 等方法)
port := g.Cfg().MustGet(ctx, "server.port", 8000).Int()
fmt.Println("server.port =", port)
}
多环境配置的常见做法是准备多份配置文件(如 config.yaml、config.prod.yaml),再通过启动参数/环境变量切换框架实际加载的文件,即"同一套代码,不同环境配置",实施细节以官方文档为准。
注意点
g.Cfg().Get返回*gvar.Var,不要直接当字符串用,先调.String()/.Int()等。- 配置文件缺失通常不会启动报错,而是读到空值,排查时先确认配置文件路径。
- 数据库、Redis 等组件配置也能放进 config.yaml,框架会按固定节点(
database、redis等)自动读取,后续章节会用到。 - 配置读取接口较多(如按文件、按环境变量的 Adapter),本章只覆盖默认文件配置。
小结
配置文件 + g.Cfg() 是 GoFrame v2 配置管理的基础用法;多环境切换能力让同一工程适配开发、测试、生产。更多配置项(热更新、多 Adapter 等)以官方文档 goframe.org 的配置管理章节为准。