Go新项目-配置文件的选取及区别和写法(1)

发布时间:2024年01月16日

在这里插入图片描述

先说结论:我们选型TOML

yaml,toml,json,ini 实际业务都有用

实际栗子是:我们想要把Go的切片作为配置文件,YAML写起来比较吃力,TOML就很容易了。

配置文件是用于配置计算机程序的参数、初始化设置的文件、业务数据公共配置等。如果没有这些配置,我们的程序就会硬编码,不够灵活

配置文件的作用主要是给即将运行的程序提供初始值,凡是在环境发生改变时需要修改的选项就可以设置成配置项。

配置文件流行分为这几类

  • TOML 结合了 INI 和 YAML 的优点

    • TOML 的写法和 ini 几乎一致,切换成本为 0 ;
    • 支持所有的 YAML 数据类型,甚至支持时间格式;
    • 支持像 ini 的 section 分组,只是在 TOML 中,它叫做 table;
    • 解析像 YAML 那样简单。
    • 支持bool、int、float、字符串、字符串数组
  • YAML (缩进怪)

    • 容易阅读和修改,支持注释。
    • 支持丰富的数据类型,对象、数组、纯量
      • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
      • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
      • 纯量(scalars):单个的、不可再分的值;字符串、bool、int、float、Null、时间、日期
    • 不同格式的明确表达。
    • 强制缩进。虽然不规定具体缩进几个空格,但是同一级的内容要保持相同的缩进。
    • 冒号后面一定要加空格,否则无法解析。
  • INI

    • 比较适合配置项的数据类型只是简单的字符串、数字的情况,如果涉及数组和 key/value 的嵌套,会比较吃力。
    • section 无法嵌套, 嵌套后的效果和没有嵌套是一样的。
    • 字符串的表示不要加引号,否则引号也会被解析出来。
  • JSON

    • 不支持注释
    • 花括号多,影响可读性
  • XML

    • 业务不常用

什么要的配置文件格式是好格式

  • 容易阅读和修改、最好支持注释。 所以 json 不是一种好的格式。
  • 易于解析,支持多数据类型。 INI 和 xml 不合适。
  • 不同格式用不同的表达。 YAML 和 TOML 做得非常好。

针对各自的使用做示例和对比

TOML

参考地址:github:https://github.com/toml-lang/toml
中文:https://github.com/LongTengDao/TOML/blob/龙腾道-译/toml-v1.0.0.md

# 例子
[analysis]
    # 全基因分析
    whole_genome = ["WGS", "childWGS", "WGS-HD"]
YAML

github:https://github.com/go-yaml/yaml

# 例子
# 项目根目录
root: "/mnt/project/bap"

# cors allow address
allow_origins:
  - "http://127.0.0.1:8080"

# 批量计算及多重样本写结论并发数
analysis:
  multiple_analysis: 50
  multiple_write: 30
  full_exon: 5
  whole_genome: 5

将yaml配置内容解析到map对象中

如果不定义struct进行Unmarshal,可以直接声明一个map对象:

resultMap := make(map[string]interface{}),代替struct 结构体来进行解析。

INI
# 例子
; A comment line
[Section]
enabled = true
path = /usr/local # another comment

JSON
# 例子
{
    "enabled": true,
    "path": "/usr/local"
}
XML
# 例子
<?xml version="1.0" encoding="UTF-8" ?>
<Config>
   <enabled>true</enabled>
   <path>/usr/local</path>
</Config>
文章来源:https://blog.csdn.net/hmx224_2014/article/details/135630549
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。