Go 语言的一个配置文件解析器
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
(完)
在 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
(完)
哇~~~ 竟然还没有评论!