我们推荐使用单例模式获取配置管理对象。我们可以方便地通过 g.Cfg() 获取默认的全局配置管理对象。同时,我们也可以通过 gcfg.Instance 包方法获取配置管理对象单例。

使用 g.Cfg

我们来看一个示例,演示如何读取全局配置的信息。需要注意的是,全局配置是与框架相关的,因此统一使用 g.Cfg() 进行获取。以下是一个默认的全局配置文件,包含了模板引擎的目录配置以及 MySQL 数据库集群(两台 master)的配置。

示例配置:

  1. viewpath: "/home/www/templates/"
  2. database:
  3. default:
  4. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  5. role: "master"
  6. - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test"
  7. role: "slave"

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/frame/g"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. )
  7. func main() {
  8. var ctx = gctx.New()
  9. fmt.Println(g.Cfg().Get(ctx, "viewpath"))
  10. fmt.Println(g.Cfg().Get(ctx, "database.default.0.role"))
  11. }

以上示例为读取数据库的第一个配置的 role 信息。运行后输出:

  1. /home/www/templates/
  2. master

可以看到,我们可以通过 g.Cfg() 方法获取一个全局的配置管理器单例对象。配置文件内容可以通过英文“ .”号进行层级访问(数组默认从 0 开始), pattern 参数 database.default.0.role 表示读取 database 配置项中 default 数据库集群中的第 0 项数据库服务器的 role 数据。

使用 gcfg.Instance

当然也可以独立使用 gcfg 包,通过 Instance 方法获取单例对象。

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/os/gcfg"
  5. "github.com/gogf/gf/v2/os/gctx"
  6. )
  7. func main() {
  8. var ctx = gctx.New()
  9. fmt.Println(gcfg.Instance().Get(ctx, "viewpath"))
  10. fmt.Println(gcfg.Instance().Get(ctx, "database.default.0.role"))
  11. }

自动检索特性

单例对象在创建时会按照文件后缀 toml/yaml/yml/json/ini/xml/properties 自动检索配置文件。默认情况下会自动检索配置文件 config.toml/yaml/yml/json/ini/xml/properties 并缓存,配置文件在外部被修改时将会自动刷新缓存。

为方便多文件场景下的配置文件调用,简便使用并提高开发效率,单例对象在创建时将会自动使用 单例名称 进行文件检索。例如: g.Cfg("redis") 获取到的单例对象将默认会自动检索 redis.toml/yaml/yml/json/ini/xml/properties,如果检索成功那么将该文件加载到内存缓存中,下一次将会直接从内存中读取;当该文件不存在时,则使用默认的配置文件( config.toml)。