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

在这里插入图片描述

先说结论:我们选型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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328696.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA设计时序约束十六、虚拟时钟Virtual Clock

目录 一、序言 二、Virtual Clock 2.1 设置界面 三、工程示例 3.1 工程设计 3.2 工程代码 3.3 时序报告 3.4 答疑 四、参考资料 一、序言 在时序约束中&#xff0c;存在一个特殊的时序约束&#xff0c;虚拟时钟Virtual Clock约束&#xff0c;根据名称可看出时钟不是实…

自动化测试——Python基础

文章目录 前言一、Python的基础语法1.标识符2.注释 二、Python中常见的数据类型1.Number&#xff08;数字&#xff09;1.1.int&#xff08;整数数据类型&#xff09;1.2.float&#xff08;浮点型&#xff09;1.3.bool&#xff08;布尔类型&#xff09; 2.String&#xff08;字符…

Redis 消息队列和发布订阅

文章目录 基本模式生产者消费者原理&模型redis实现java实现 发布者订阅者原理&模型redis实现java实现 stream模式原理&模型工作原理redis实现Java实现 选型外传 基本模式 采用redis 三种方案&#xff1a; ● 生产者消费者&#xff1a;一个消息只能有一个消费者 ●…

canvas绘制美队盾牌

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

Architecture Lab:预备知识2【汇编call/leave/ret指令、CS:APP练习4.4】

chap4的练习4.4&#xff08;page.255&#xff09;让用Y86-64实现rsum&#xff08;递归求数组元素之和&#xff09;&#xff0c;提示为&#xff1a;先得到x86-64汇编代码&#xff0c;然后转换成Y86-64的 这是rsum的c实现&#xff1a; long rsum(long *start, long count) {if …

1.环境部署

1.虚拟机安装redhat8系统 这个其实很简单&#xff0c;但是有一点小细节需要注意。 因为我的电脑是 16核心的&#xff0c;所以选择内核16&#xff0c;可以最大发挥虚拟机的性能 磁盘选择SATA&#xff0c;便于后期学习 将一些没用的设备移除 选择安装redhat 8 时间选择上海 选择…

php反序列化之pop链构造(基于重庆橙子科技靶场)

常见魔术方法的触发 __construct() //创建类对象时调用 __destruct() //对象被销毁时触发 __call() //在对象中调用不可访问的方法时触发 __callStatic() //在静态方式中调用不可访问的方法时触发 __get() //调用类中不存在变量时触发&#xff08;找有连续箭头的…

前端远原生js爬取数据的小案例

使用方法 注意分页的字段需要在代码里面定制化修改&#xff0c;根据你爬取的接口&#xff0c;他的业务规则改代码中的字段。比如我这里总条数叫total&#xff0c;人家的不一定。返回的数据我这里是data.rows&#xff0c;看看人家的是叫什么字段&#xff0c;改改代码。再比如我这…

【面试合集】说说微信小程序的发布流程?

面试官&#xff1a;说说微信小程序的发布流程&#xff1f; 一、背景 在中大型的公司里&#xff0c;人员的分工非常仔细&#xff0c;一般会有不同岗位角色的员工同时参与同一个小程序项目。为此&#xff0c;小程序平台设计了不同的权限管理使得项目管理者可以更加高效管理整个团…

【项目经验】详解Puppeteer入门及案例

文章目录 一.项目需求及Puppeteer是什么&#xff1f;二.Puppeteer注意事项及常用的方法1.注意事项2.常用的方法*puppeteer.launch&#xff08;&#xff09;**browser.newPage()**page.goto()**page.on(request&#xff0c;&#xff08;&#xff09;> {}&#xff09;**page.e…

(亲测可行)关于提高IDEA运行速度的方案

1.作者IDEA软件版本和计算机内存 Ultimate 2022.1.2版IDEA&#xff0c;计算机内存为12GB 2.修改配置以提高IDEA运行速度的误区-调高堆内存 很多文章会教调配置的内存&#xff0c;但大多是让你调高堆内存&#xff0c;比如会让你调高-Xms -Xmx &#xff0c;这两种对应的是最…

推荐几个Github高星GoLang管理系统

在Web开发领域&#xff0c;Go语言&#xff08;Golang&#xff09;以其高效、简洁、高并发等特性逐渐成为许多开发者的首选语言。有许多优秀的Go语言Web后台管理系统&#xff0c;这些项目星星众多&#xff0c;提供了丰富的功能和良好的代码质量。本文将介绍一些GitHub高星的GoLa…

32单片机RTC时间接续,掉电时间保存

1、实现思路 前提&#xff1a;首先要实现RTC掉电之后时间还能继续走&#xff0c;RTC电池是必要的 说明&#xff1a;设备第一次启动需要初始化配置RTC&#xff0c;但当二次启动再重新配置RTC会导致RTC计数器置零&#xff0c;所以传统的程序流程是不行的&#xff0c;我们需要知…

.sync详解记录(vue2)

.sync修饰符使用注意 在Vue.js中&#xff0c;.sync修饰符是一个非常有用的修饰符&#xff0c;它可以让父组件和子组件之间实现双向数据绑定。本文将详细介绍.sync修饰符的使用方法和原理。 什么是.sync修饰符&#xff1f; .sync修饰符是Vue.js提供的一种语法糖&#xff0c;它可…

transbigdata笔记:轨迹切片

1 方法介绍 在transbigdata笔记&#xff1a;轨迹停止点和行程提取-CSDN博客中&#xff0c;已经可以把轨迹点拆分成停止点和行程点&#xff0c;但是行程点只有起止位置&#xff0c;不包含行程轨迹信息为了进一步分析车辆的行驶轨迹&#xff0c;需要从每次行程的时间段中提取轨迹…

《2023年度程序员收入报告》 :旧金山位居第一,北京程序员中位数超60万元

2024年刚刚拉开序幕&#xff0c;备受瞩目的程序员薪资调研报告再度登场。由知名数据采集平台levels.fyi 搜集并整理了《2023年全球程序员收入报告》&#xff0c;为我们揭示了程序员最新的收入情况&#xff0c;其中有哪些值得关注的亮点呢&#xff1f; 行情向好&#xff0c;大多…

jmeter--8.加密传输

目录 1. Base64加密 2. MD5加密 3. SHA加密&#xff08;sha1\sha\sha224\sha256\sha384\sha512&#xff09; 4. RSA加密-公钥加密&#xff0c;私钥解密 1. Base64加密 1.1 在需要加密传输的接口下新增BeanShell 预处理程序&#xff0c;${username}可替换成value值&#xff…

Pycharm Terminal 无法激活conda环境

1.问题 Failed to activate conda environment. Please open Anaconda prompt, and run conda init powershell there. 这导致我们无法在Pycharm中使用conda命令 2.解决办法 修改为第二个&#xff0c;然后重启Terminal 再打开时发现已经是当前的conda环境

在客户端访问远程Linux服务器的私有IP地址的URL

文章目录 环境背景SSH tunnel和正向/反向代理步骤第一步第二步效果考一考 其它多次跳转另一种方法&#xff1a;正向代理 参考 环境 服务器&#xff1a;Ubuntu 22.04客户端&#xff1a;Mac 14.2.1 背景 在远程Linux服务器上搭建了minikube环境。minikube提供了dashboard功能&…

LLM:Scaling Laws for Neural Language Models (上)

论文&#xff1a;https://arxiv.org/pdf/2001.08361.pdf 发表&#xff1a;2020 摘要1&#xff1a;损失与模型大小、数据集大小以及训练所用计算量成比例&#xff0c;其中一些趋势跨越了七个量级以上。 2&#xff1a;网络宽度或深度等其他架构细节在很大范围内影响较小。3&…