• 独立使用cfg包进行配置文件管理

    独立使用cfg包进行配置文件管理

    由于gf框架的所有组件都是低耦合设计的,因此可以单独使用cfg模块进行配置管理,这种方式相对来说比较简单。请查看以下示例。为示例需要这里将同一个配置文件的内容拆分为两个配置文件,并且使用了不同的配置文件格式,redis.tomlmemcache.yml,都放到一个配置文件管理目录 /var/www/config/下进行统一管理(需要注意的是)。在平时的开发中,一般统一使用一种配置文件格式即可。

    配置文件的内容如下:

    1. # redis.toml - redis服务器配置信息
    2. [[redis-cache]]
    3. db = 0
    4. host = "192.168.0.100"
    5. port = 6379
    6. [[redis-cache]]
    7. db = 1
    8. host = "192.168.0.100"
    9. port = 6379
    10. [[redis-disk]]
    11. db = 0
    12. host = "192.168.0.100"
    13. port = 6380
    14. [[redis-disk]]
    15. db = 1
    16. host = "192.168.0.100"
    17. port = 6380
    1. # memcache.yml - memcache服务器配置信息
    2. - host: 192.168.0.101
    3. port: 11211
    4. expire: 60
    5. - host: 192.168.0.102
    6. port: 11211
    7. expire: 60

    分别读取指定redis配置信息以及所有的memcache配置信息:

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/g/os/gcfg"
    5. )
    6. func main() {
    7. c := gcfg.New("/home/john/Workspace/Go/GOPATH/src/github.com/gogf/gf/geg/os/gcfg")
    8. redisConfig := c.GetArray("redis-cache", "redis.toml")
    9. memConfig := c.GetArray("", "memcache.yml")
    10. fmt.Println(redisConfig)
    11. fmt.Println(memConfig)
    12. }
    13. // 输出:
    14. // [map[db:0 host:192.168.0.100 port:6379] map[db:1 host:192.168.0.100 port:6379]]
    15. // [map[port:11211 expire:60 host:192.168.0.101] map[expire:60 host:192.168.0.102 port:11211]]

    以上示例代码中,我们可以通过pattern参数指定获取的参数项,如果获取配置文件的所有配置信息,那么pattern传递一个空的字符串即可。第二个文件参数指定需要操作的配置文件名称,不同的配置文件需要传递不同的配置文件参数,因此相对来说会比较繁琐。我们可以将所有这些基础配置都放到统一的配置文件中,这样我们可以只需要通过pattern参数来做区分不同的配置项即可,方便调用,因此我们可以做如下改进。

    将所有配置放到config.toml配置文件中,此时config.toml的配置文件内容如下:

    1. # redis配置
    2. [[redis-cache]]
    3. db = 0
    4. host = "192.168.0.100"
    5. port = 6379
    6. [[redis-cache]]
    7. db = 1
    8. host = "192.168.0.100"
    9. port = 6379
    10. [[redis-disk]]
    11. db = 0
    12. host = "192.168.0.100"
    13. port = 6380
    14. [[redis-disk]]
    15. db = 1
    16. host = "192.168.0.100"
    17. port = 6380
    18. # memcache配置
    19. [[memcache]]
    20. host = "192.168.0.101"
    21. port = 11211
    22. expire = 60
    23. [[memcache]]
    24. host = "192.168.0.102"
    25. port = 11211
    26. expire = 60

    那么假如我们通过以下程序获取memcache的配置:

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/g/os/gcfg"
    5. )
    6. func main() {
    7. c := gcfg.New("/var/www/config")
    8. v := c.GetArray("memcache")
    9. fmt.Println(v)
    10. }
    11. // 输出:
    12. // [map[port:11211 expire:60 host:192.168.0.101] map[expire:60 host:192.168.0.102 port:11211]]

    可以看到,读取配置的方式简化了不少。因此在实际项目开发中,建议尽可能地将配置(特别是频繁使用的配置)统一存放到config.toml文件中进行统一管理,大大提高开发及维护效率。

    此外有一点需要提醒的是,如果调用的方法与配置项的类型不匹配时,pattern将会检索失败,返回空值(对应类型的空值)。例如,假如配置项是map类型,而使用GetArray进行获取时,将会得到一个nil。