需求
环境变量是操作系统和shells里面的一项功能。使用环境变量的话需要在运行程序之前将需要的变量提前设置好。
INI,最早在MS-DOS中使用。这是一个k/v 对的格式。其中key可以以section分组。这种配置文件有很多解析器(parser)。对于比较简单的配置,而且你使用的语言中有对应解析器可以使用这种。
对于更复杂的数据格式,后来又诞生了XML, 1996年推出后的10年渐渐流行,但是现在的新技术很少使用。可能是容易写的冗长和臃肿,而且不太直观。对比下xml和json
<config>
<post title="Config files: ..."
date="2019-08-26"
draft="false">
<tags>
<t>tag1</t>
<t>tag2</t>
</tags>
</post>
...
</config>
[
{ title: "Config files: ...",
date: "2019-08-26",
draft: false,
tags: [
"tag1",
"tag2"
]
},
...
]
JSON 也是可以配置复杂的数据。JSON是为了在AJAX调用中取代XML而设计的。所以在最初的设计中它是为了数据交换而不是作为一种配置文件。这可能是JSON不支持注释的原因。VSCode中扩展了JSON到JSONC “JSON with comments"。但是这不是广泛使用的标准。如果你的配置文件需要注释,不要使用JSON。
YAML, 最开始设计为一种 markup 语言(类型HTML),但是后来重新定位为数据。YAML对于缩进敏感,如果代码的缩进有问题,会导致预期之外的结果和错误。这对于对技术不太了解的配置人员不太友好。YAML也会将配置的值转换为数据类型(string,number,boolean,date等),这些都是根据值的内容来转换。但是有时候会产生问题。比如如下的配置:
tv_shows:
- 新闻
- 24
- !!str 90210
这是一个关于电视节目的配置表,新闻
是一个节目的名称,被解析为string
,这没有问题。但是第二个选项24
却被解析为整数,这可能导致程序崩溃。第三个选项明确指定了这个选项为字符串才会避免这个问题。YAML的配置还有一些坑:
TOML wiki 相比YAML比较简单,它没有使用缩进来代表数据层级。缩进会被Parser忽略。TOML有着明确的语法来配置数据类型:strings,integers,floats,booleans,dates,times 等等。
tv_shows = [
"新闻",
"24",
"90210",
]
对于配置文件的选择,还是得看你的使用场景/编程语言/用户习惯,等等。明白了不同的配置文件的不同可以帮助你的选择。
文章参考:
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!