g.Cfg()
gcfg.Instance
g.Cfg
我们来看一个示例,演示如何读取全局配置的信息。需要注意的是,全局配置是与框架相关的,因此统一使用g.Cfg()进行获取。以下是一个默认的全局配置文件,包含了模板引擎的目录配置以及MySQL数据库集群(两台master)的配置。
MySQL
master
示例配置:
viewpath: "/home/www/templates/" database: default: - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" role: "master" - link: "mysql:root:12345678@tcp(127.0.0.1:3306)/test" role: "slave"
示例代码:
package main import ( "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" ) func main() { var ctx = gctx.New() fmt.Println(g.Cfg().Get(ctx, "viewpath")) fmt.Println(g.Cfg().Get(ctx, "database.default.0.role")) }
以上示例为读取数据库的第一个配置的role信息。运行后输出:
role
/home/www/templates/ master
可以看到,我们可以通过g.Cfg()方法获取一个全局的配置管理器单例对象。配置文件内容可以通过英文“.”号进行层级访问(数组默认从0开始),pattern参数database.default.0.role表示读取database配置项中default数据库集群中的第0项数据库服务器的role数据。
.
0
pattern
database.default.0.role
database
default
当然也可以独立使用gcfg包,通过Instance方法获取单例对象。
gcfg
Instance
package main import ( "fmt" "github.com/gogf/gf/v2/os/gcfg" "github.com/gogf/gf/v2/os/gctx" ) func main() { var ctx = gctx.New() fmt.Println(gcfg.Instance().Get(ctx, "viewpath")) fmt.Println(gcfg.Instance().Get(ctx, "database.default.0.role")) }
单例对象在创建时会按照文件后缀toml/yaml/yml/json/ini/xml/properties自动检索配置文件。默认情况下会自动检索配置文件config.toml/yaml/yml/json/ini/xml/properties并缓存,配置文件在外部被修改时将会自动刷新缓存。
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)。
g.Cfg("redis")
redis.toml/yaml/yml/json/ini/xml/properties
config.toml
.properties 配置不支持吗?怎么扩展支持?
.properties是ini格式吧,默认就支持了。
.properties
强哥,是不支持.properties配置文件的。
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.properties")
报错
load config file "xxxx\config\config.properties" failed: unsupported type "" for loading
是不是要执行解析采用的格式才可以?指定为ini?
后缀改为.ini也不行,报错缺少section
如果想通过环境变量配置来覆盖文件配置呢?未找到有效方式
5 Comments
happyinsect
.properties 配置不支持吗?怎么扩展支持?
郭强
.properties
是ini格式吧,默认就支持了。happyinsect
强哥,是不支持.properties配置文件的。
g.Cfg().GetAdapter().(*gcfg.AdapterFile).SetFileName("config.properties")
报错
load config file "xxxx\config\config.properties" failed: unsupported type "" for loading
happyinsect
是不是要执行解析采用的格式才可以?指定为ini?
后缀改为.ini也不行,报错缺少section
carrot
如果想通过环境变量配置来覆盖文件配置呢?未找到有效方式