潘军杰的博客

Go 语言的一个配置文件解析器

发表 2016-04-14 22:27:19 阅读(1147) 评论(0) 赞(1)
Go 语言里找一个配置文件解析器,无意间发现了 https://github.com/robfig/config 这个库是 robfig 从 https://github.com/miguel-branco/goconfig  里分支修改过来的。看了下时间,已有一年多没动过了,估计库已相当完善,够用了。

在 github 里很多优秀的库或人,已经尘封了很长的时间,不知道什么原因,让人挺感慨的,毕竟前人花费了相当多的心血完成的东西,最终并没有得到社区的发现、认可、广泛使用,或其他个人原因,不得不雪藏掉,但东西是相当不错的,希望使用的人,可以推广或star一下。

言归正传,配置文件在项目中发挥很重要的作用,有些东西需要灵活配置在一个文件里,以便日后做调整,不希望改动到源码,采用可配置的方式放在一个文件里,是一个不错的办法。Java 里 properties,xml conf 等等,使用得很广泛,就是这个原理。


https://github.com/robfig/config 这个库,适用于 cfg 文件,也就是说配置文件类似于 ini 格式的文件,如以下这个 config.cfg 文件 :

[DEFAULT]
host: www.example.com
protocol: http://
base-url: %(protocol)s%(host)s

[service-1]
url: %(base-url)s/some/path
delegation: on
maxclients: 200 # do not set this higher
comments: This is a multi-line

# name: 5-wow.com


配置文件里 采用 # 来注释,如:

# name: 5-wow.com

把配置文件 config.cfg 放置在项目的根目录下,Go 语言里可以这么读取并取值:

c, _ := config.ReadDefault("config.cfg")

c.String("service-1", "url")
// result is string "http://www.example.com/some/path"

c.Int("service-1", "maxclients")
// result is int 200

c.Bool("service-1", "delegation")
// result is bool true

c.String("service-1", "comments")
// result is string "This is a multi-line\nentry"

当然,配置文件可以放置在项目的外部某个路径下,如:

/home/conf/

读取的时候,可以这么写:
c, _ := config.ReadDefault("/home/conf/config.cfg")

配置文件 config.cfg 里的中括号的字符串,表示配置的一个片段,如此一来,配置文件更加模块化了。比如,配置文件里分默认,前,后台配置,整个配置文件看过去很清晰明了。

使用上,用户还可以每个设置选项拼接,比如:
host: www.example.com
protocol: http://
base-url: %(protocol)s%(host)s

base-url 就是由 host 和 protocol 两个选项拼接起来的。

这个库基本能满足我们读取配置文件,并取值用途,另外还支持 字符串 整数 布尔值 等基本的类型转换。同时也支持写入操作,这是锦上添花的事情,值得去试一试。

具体的使用,需要仔细参考 https://github.com/robfig/config 的例子 https://github.com/robfig/config/blob/master/README.md

(完)
Donate

如果文章对您有帮助,请使用手机支付宝扫描二维码,捐赠X元,作者离不开读者的支持!

0 条网友评论

哇~~~ 竟然还没有评论!

称呼*
邮箱* 回复用途!
内容*
验证码*
验证码 看不清换张