TOML格式配置文件

TOML:

GitHub 目前的新项目已经转用 CoffeeScript 了。CoffeeScript 比 JavaScript 要简洁优雅得多。同样地,GitHub 也觉得 YAML 不够简洁优雅,因此捣鼓出了一个 TOML

TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。

例子

title = "TOML 例子"[owner]
name = "Tom Preston-Werner"
organization = "GitHub"
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # 日期时间是一等公民。为什么不呢?

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000enabled = true[servers]  # 你可以依照你的意愿缩进。使用空格或Tab。TOML不会在意。
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"[clients]
data = [ ["gamma", "delta"], [1, 2] ]# 在数组里换行没有关系。hosts = [  "alpha",  "omega"]

TOML 是大小写敏感的。

func ReplaceEnvsFile(path string) (string, error) {
	file, err := os.Open(path)
	if err != nil {
		return "", err
	}
	r, err := EnvSub(file)
	if err != nil {
		return "", err
	}
	contents, err := ioutil.ReadAll(r)
	if err != nil {
		return "", err
	}
	return string(contents), nil
}

func EnvSub(r io.Reader) (io.Reader, error) {
	bufIn := bufio.NewReader(r)
	bufOut := new(bytes.Buffer)
	for {
		chunk, err := bufIn.ReadBytes(byte(‘%‘))
		if err != nil {
			if err == io.EOF {
				// We‘re done.
				bufOut.Write(chunk)
				break
			}
			return nil, err
		}
		bufOut.Write(chunk[:len(chunk)-1])

		tmp := make([]byte, 4)
		tmp, err = bufIn.Peek(4)
		if err != nil {
			if err == io.EOF {
				// End of file, write the last few bytes out and exit.
				bufOut.WriteRune(‘%‘)
				bufOut.Write(tmp)
				break
			}
			return nil, err
		}

		if string(tmp) == "ENV[" {
			// Found opening delimiter, advance the read cursor and look for
			// closing delimiter.
			tmp, err = bufIn.ReadBytes(byte(‘[‘))
			if err != nil {
				// This shouldn‘t happen, since the Peek succeeded.
				return nil, err
			}
			chunk, err = bufIn.ReadBytes(byte(‘]‘))
			if err != nil {
				if err == io.EOF {
					// No closing delimiter, return an error
					return nil, ErrMissingCloseDelim
				}
				return nil, err
			}
			// `chunk` is now holding var name + closing delimiter.
			// var name contains invalid characters, return an error
			if bytes.IndexAny(chunk, invalidEnvChars) != -1 ||
				bytes.Index(chunk, invalidEnvPrefix) != -1 {
				return nil, ErrInvalidChars
			}
			varName := string(chunk[:len(chunk)-1])
			varVal := os.Getenv(varName)
			bufOut.WriteString(varVal)
		} else {
			// Just a random ‘%‘, not an opening delimiter, write it out and
			// keep going.
			bufOut.WriteRune(‘%‘)
		}
	}
	return bufOut, nil
}

func main(){
      contents, err := ReplaceEnvsFile("test.toml") 
	if err != nil {
		return err
	}

	if _, err = toml.Decode(contents, &configFile); err != nil {
		return fmt.Errorf("Error decoding config file: %s", err)
	}
}

配置文件test.toml

[hekad]

share_dir="/usr/local/heka"

输出内容为:

map[hekad:map[share_dir:/usr/local/heka]]
时间: 2024-08-06 11:19:06

TOML格式配置文件的相关文章

C语言ini格式配置文件的读写

依赖的类 1 /*1 utils.h 2 *# A variety of utility functions. 3 *# 4 *# Some of the functions are duplicates of well known C functions that are not 5 *# standard. 6 *2 License 7 *[ 8 *# Author: Werner Stoop 9 *# This software is provided under the terms of

yaml格式配置文件

YAML 是一种可读性非常高,与程序语言数据结构非常接近.同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言. python中处理 Yaml 格式的数据需要先下载pyyaml: pip install Pyyaml 基本语法规则: 1.大小写敏感 2.使用缩进表示层级关系 3.不允许使用 TAB 键来缩进,只允许使用空格键来缩进 4.缩进的空格数量不重要 5.使用"#"来表示注释 支持数据格式: 1.对象:键值对的集合,又称映射 (mapping) / 哈希(hashes)/

Qt读写Json格式配置文件

头文件DConfig.h 1 #pragma once 2 3 #include <QSettings> 4 #include <QFile> 5 #include <QJsonDocument> 6 #include <QJsonObject> 7 #include <QJsonArray> 8 9 class DConfig 10 { 11 public: 12 DConfig(const QString &fileName); 13

IDEA中springboot项目添加yml格式配置文件

1.先创建application.properties 文件,在resources文件夹,右键 new -> Resource Bundle  如下图所示,填写名称 2.生成如下图所示文件 3.将此文件后缀名改为yml.右键->Refactor->Rename  如下图所示,点击Refactor 4.重命名打开即可 原文地址:https://www.cnblogs.com/pxblog/p/12304493.html

golang web 方案

概要 开发 web 框架 数据库 认证 日志 配置 静态文件服务 上传/下载 发布 docker 打包 部署中遇到的问题 时区问题 概要 轻量的基于 golang 的 web 开发实践. golang 上手简单, 第三方库丰富, 对于业务没那么复杂的项目, 作为 API 的后端也是不错的选择. 下面是对 golang 作为 API 后端的 web 开发实践总结. 开发 API 后端的功能模块基本已经固定, 基于自己的项目, 主要使用了以下模块: web 框架: 整个方案的核心 数据库: orm

验证toml配置文件合法性

背景 我们知道现在主流的配置文件格式有xml,json,toml,yaml,这里我以toml为例,因为我们项目用的是toml格式的配置文件.有一次线上发布代码的时候由于没有验证toml配置文件的合法性,配置推上去后,程序没有正常启动,导致服务不可用. 思考 出现这个失误之后,我认为应该可以在发布代码之前,先提前验证下配置文件的合法性,避免出现低级的人为失误,把错误的配置文件推到线上去,于是想找可以验证toml配置文件的合法性的工具. 方案 这里需要安装golang,假设在linux环境下 获取源

TOML 简介

Contents TOML 的全称是 Tom's Obvious, Minimal Language,因为它的作者是 GitHub 联合创始人 Tom Preston-Werner, TOML 这个名字贼逗. TOML 是目录最优秀的配置文件格式方案,相较于yaml.json.ini,优势很明显.目前很多新项目直接使用 TOML作为配置文件的格式,比如golang官方的go.mod. TOML 的目标 TOML 的目标是成为一个极简的配置文件格式.TOML 被设计成可以无歧义地被映射为哈希表,从

Hibernate(三)结构-配置文件-实体映射及配置文件

一.体系结构 SessionFactory:属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照.Session的工厂.有可能持有一个可选的数据缓存可以进程级别或者群级别保存可以在事务中重用数据. 会话,Session:单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话.封装了一个JDDBC连接,它也是Transaction的工厂,保存有必须持久化对象的缓存,用于遍历对象,或者通过标识符查找对象. 持久化对象(Persistent Object)及其集合(Collect

ASP.NET5最佳实践:技术选择+依赖注入+配置文件读写

1.技术选择 页面: html静态页面很好,但模板(代码块)重用怎么办? 再有与后台交互,比如绑定数据又如何办? 模板不能重用,无解.后台交互,无怪乎可以使用js代码.特别现在流行SPA应用,html+angularjs类的框架…… cshtml可以使用Layout页(类似webfroms master模板页),也可以使用ViewsComponets(类似于webfroms web控件) 它使用Razor视图引擎解析,页面甚至可以使用c#语言.和后台交互式很Easy的. 如果说cshtml结构代