golang使用yaml格式解析构建配置文件
现在主流的配置文件格式有这么几种,xml、yaml、config… xml就算了,太挫了,太土, 太繁琐… config 就是mysql,apache my.cnf的那种格式,这个格式适合功能分层,不适合写同级的配置端.
yaml是我最喜欢的配置格式,像ansible、saltstack、puppet都是使用yaml来做配置格式.
我在以前的公司开发的平台系统用的都是yaml格式. 简练,充满张力 !!!
我在python中只用yaml格式,在golang中当然也会优先选择这门配置语言. 又废话了.
话说golang关于yaml的库包在github中能找到好几个,但有些yaml功能包光看那奇葩的库包名就觉得不靠谱. 说到这里我又要喷golang的库包管理了,你丫就不能整个类似pypi服务… 说实话我真的害怕作者提交新功能,然后导致整个库包都不能使用。
这个是我使用的go yaml包,star关注值还不低 . https://github.com/go-yaml/yaml
废话不多说了,直接上yaml的例子。 我在代码里参杂了yaml.v2库的使用方法.
跟golang处理json结构一样,yaml的格式也是需要用struct结构体反射的. struct里的字段首字母最好是大写,yaml string到时无所谓.
#http://xiaorui.cc
package main import (
"fmt"
"log" "gopkg.in/yaml.v2"
) var data = `
blog: xiaorui.cc
best_authors: ["fengyun","lee","park"]
desc:
counter: 521
plist: [3, 4]
` type T struct {
Blog string
Authors []string `yaml:"best_authors,flow"`
Desc struct {
Counter int `yaml:"Counter"`
Plist []int `yaml:",flow"`
}
} func main() {
t := T{}
//把yaml形式的字符串解析成struct类型
err := yaml.Unmarshal([]byte(data), &t)
//修改struct里面的记录
t.Blog = "this is Blog"
t.Authors = append(t.Authors, "myself")
t.Desc.Counter = 99
fmt.Printf("--- t:\n%v\n\n", t)
//转换成yaml字符串类型
d, err := yaml.Marshal(&t)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("--- t dump:\n%s\n\n", string(d))
}
golang使用yaml格式解析构建配置文件的更多相关文章
- kubernetes yaml格式的Pod配置文件
kubernetes yaml文件解析 # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: #必 ...
- Golang 解析Yaml格式
Golang官方并没有提供Yaml解析包,所以需要使用第三方包.可用的第三方包有不少,这里选择的是 gopkg.in/yaml.v2,这个包在github上有不少的star,也的确挺好用.其使用的是A ...
- Golang 入门系列(九) 如何读取YAML,JSON,INI等配置文件
实际项目中,读取相关的系统配置文件是很常见的事情.今天就来说一说,Golang 是如何读取YAML,JSON,INI等配置文件的. 1. json使用 JSON 应该比较熟悉,它是一种轻量级的数据交换 ...
- yaml格式配置文件
YAML 是一种可读性非常高,与程序语言数据结构非常接近.同时具备丰富的表达能力和可扩展性,并且易于使用的数据标记语言. python中处理 Yaml 格式的数据需要先下载pyyaml: pip in ...
- Go-如何读取yaml,json,ini等配置文件
1. json使用 JSON 应该比较熟悉,它是一种轻量级的数据交换格式.层次结构简洁清晰 ,易于阅读和编写,同时也易于机器解析和生成. 创建 conf.json: { "enabled&q ...
- jQuery2.x源码解析(构建篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 笔者阅读了园友艾伦 Aaron的系列博客< ...
- 一个.NET通用JSON解析/构建类的实现(c#)转
转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...
- Python 解析构建数据大杂烩 -- csv、xml、json、excel
Python 可以通过各种库去解析我们常见的数据.其中 csv 文件以纯文本形式存储表格数据,以某字符作为分隔值,通常为逗号:xml 可拓展标记语言,很像超文本标记语言 Html ,但主要对文档和数据 ...
- 一个.NET通用JSON解析/构建类的实…
一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...
随机推荐
- UIScrollView出现位移问题
啦啦啦啦啦~~~ UINavigationController和UIScrollView一起使用时会导致UIScrollView位置偏移 情况:UINavigationController的视图上的第 ...
- # iOS 10 适配 # 适配刷新控件 以MJRefresh 为例
在iOS10中ScrollView 添加了一个refreshControl的东西 - - 不知道水果公司做了什么 导致原有的刷新控件类刷新后frame.y 向下偏移了20 起初以为是水果调整了sta ...
- iOS切图文件的命名规范
万能公式:
- 开启我的Android之旅-----记录Android环境搭建遇到的问题
在现在这个离不开手机的时代,对于手机APP的开发也是一个很大的市场,所以自己也想去探一探手机APP开发,在我们进行Android开发的第一步就是搭建环境,具体怎么搭建我就不说,这里记录一下在搭建环境的 ...
- 我的第一个React Native App
我用了三天时间实现了一个相对比较完整的React Native 新闻发布类型的示例.应用做得很简单,但大多React Native的组件都有用到,今天做一个分享(由于我电脑是Windows系统,所以只 ...
- regsvr32命令
regsvr32是Windows操作系统命令,用来注册及反注册DLL文件和ActiveX文件. 1. 使用示例 regsvr32 foo.dll // 注册foo.dll文件到Windows ...
- JavaScript的写类方式(6)
时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,extends,super. ES6的写类方式 // 定义类 Person c ...
- 架构实例之SpringTest
架构实例之SpringTest 1.开发工具和开发环境 开发工具: MyEclipse10,JDK1.6.0_13(32位),Tomcat7.0(32位),mysql5.7.13 开发环境 ...
- 《InsideUE4》-10-GamePlay架构(九)GameInstance
一人之下,万人之上 引言 上篇我们讲到了UE在World之上,继续抽象出了Player的概念,包含了本地的ULocalPlayer和网络的UNetConnection,并以此创建出了World中的Pl ...
- 苹果iOS强制HTTPS迫在眉睫,距离2017年只剩1天,准备好了么?
其实不久前苹果就发了通告,要求ios上的应用全部以HTTPS来进行接口调用以及数据访问,这样做是为了数据安全,一方面为了自己,另一方面也是对应用的要求更加严格,这么做很好,也加强了市场app的规范,虽 ...