关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿!

作者:会飞的鲶鱼
链接:Golang解析yaml格式文件 - 简书
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

前言

Yaml是一种简洁易懂的文件配置语言,比如其巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构中会变得复杂而难以辨认。对于更加具体的介绍,大家可以去自行Google一下。
本文是在基于golang第三方开源库yaml.v2的基础上进行操作的,只是简单介绍了一下怎样在golang中对yaml文件进行解析。下面是yaml.v2在github上的地址yaml.v2地址以及在godoc.org上的介绍yaml库简介。

正文

下面就直接使用代码来进行简单的介绍了。
测试文件如下:
test.yaml

cache:enable : falselist : [redis,mongoDB]
mysql:user : rootpassword : Tech2501host : 10.11.22.33port : 3306name : cwi

test1.yaml

enable : false
list : [redis,mongoDB]
user : root
password : Tech2501
host : 10.11.22.33
port : 3306
name : cwi

yaml.go

package module
// Yaml struct of yaml
type Yaml struct {Mysql struct {User string `yaml:"user"`Host string `yaml:"host"`Password string `yaml:"password"`Port string `yaml:"port"`Name string `yaml:"name"`}Cache struct {Enable bool `yaml:"enable"`List []string `yaml:"list,flow"`}
}// Yaml1 struct of yaml
type Yaml1 struct {SQLConf Mysql `yaml:"mysql"`CacheConf Cache `yaml:"cache"`
}// Yaml2 struct of yaml
type Yaml2 struct {Mysql `yaml:"mysql,inline"`Cache `yaml:"cache,inline"`
}// Mysql struct of mysql conf
type Mysql struct {User string `yaml:"user"`Host string `yaml:"host"`Password string `yaml:"password"`Port string `yaml:"port"`Name string `yaml:"name"`
}// Cache struct of cache conf
type Cache struct {Enable bool `yaml:"enable"`List []string `yaml:"list,flow"`
}

main.go

package main
import ("io/ioutil""log""module"yaml "gopkg.in/yaml.v2"
)
func main() {// resultMap := make(map[string]interface{})conf := new(module.Yaml)yamlFile, err := ioutil.ReadFile("test.yaml")// conf := new(module.Yaml1)// yamlFile, err := ioutil.ReadFile("test.yaml")// conf := new(module.Yaml2)//  yamlFile, err := ioutil.ReadFile("test1.yaml")log.Println("yamlFile:", yamlFile)if err != nil {log.Printf("yamlFile.Get err #%v ", err)}err = yaml.Unmarshal(yamlFile, conf)// err = yaml.Unmarshal(yamlFile, &resultMap)if err != nil {log.Fatalf("Unmarshal: %v", err)}log.Println("conf", conf)// log.Println("conf", resultMap)
}

总结

从main.go的代码中可以看得出,当使用如test.yaml这种格式的yaml文件时,可以使用yaml.go中的Yaml和Yaml1这两种struct来进行解析。当使用类似于test1.yaml这种格式的文件时,可以使用yaml.go中的Yaml2这种struct来进行解析。
个人理解,Yaml1与Yaml2的区别在于Yaml2中在tag中加入了inline,使之变成了内嵌类型。
在官方的简介中对于tag中支持的flag进行了说明,分别有flowinlineomitempty。其中flow用于对数组进行解析,而omitempty的作用在于当带有此flag变量的值为nil或者零值的时候,则在Marshal之后的结果不会带有此变量。
当然大家如果懒得去写struct进行Unmarshal时,也是可以像main.go中直接声明一个resultMap := make(map[string]interface{}) 这样来进行解析的。

关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿!

Golang解析yaml格式文件相关推荐

  1. Golang 解析Yaml格式

    Golang官方并没有提供Yaml解析包,所以需要使用第三方包.可用的第三方包有不少,这里选择的是 gopkg.in/yaml.v2,这个包在github上有不少的star,也的确挺好用.其使用的是A ...

  2. 第8.1.2解析mht格式文件

    有人建议改造一下mhtifier.py就可以解析mht格式文件,它的示例没有告诉我,怎么验证.而且我改造也失败了,可能是我的水平有限. Python :解析 word 文档(前程无忧简历),这篇文章的 ...

  3. C语言解析Ini格式文件

    引用别人的博文: http://www.open-open.com/lib/view/open1402278076447.html 可以解析 INI 格式的字符串.解析文件.保存到文件. 下面是头文件 ...

  4. java解析sgf格式文件简单实现

    围棋棋谱一般被保存为sgf格式,要想在自己的网站中实现打谱功能,必要要会解析sgf文件,取出里面的对局信息和落子,楼主现在用一种比较简单的方法来解析它 说明:楼主所用的棋谱是从新浪围棋里下载来的,示例 ...

  5. java解析pdf格式文件获取文本内容

    思路:先将pdf按照页数分割成图片,在将分割的图片做图片识别,提取文字,最后将提取到的文字解析或者保存到txt文件. 图片识别我使用的是百度开发者中心提供的 图片识别接口,我在上一篇文章中有详细说明, ...

  6. 在Go语言程序中使用gojson来解析JSON格式文件

    gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据 安装 1 go get github.com/widuu/gojson 使用简介 结构 type Js ...

  7. nlp~tensorflow解析json格式文件

    json格式对应的文件链接(名字为sarcasm.json) 对应的其中一组数据如下: import os os.environ['TF_CPP_MIN_LOG_LEVEL']='3' import ...

  8. java解析excel文件_1.3.1 python解析excel格式文件

    Excel表格 Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件. excel文档的基本定义 工作薄(work ...

  9. 1.3.1 python解析excel格式文件

    Excel表格 Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件. excel文档的基本定义 工作薄(work ...

最新文章

  1. 白盒测试的3中主要方法(cont.)
  2. 大厂程序员跳槽去小公司当CTO,是一种怎样的体验?
  3. HTML5 将改变Web开发模式
  4. C# 制作Com组件:java调用.net DLL的方法
  5. [翻译] C# 8.0 新特性
  6. Linux多进程的应用
  7. Silverlight 3一瞥
  8. Apache Rewrite 理解
  9. 【Music】Never took the time
  10. 常用jar包之commons-collection使用
  11. SWUST OJ Coin Changing
  12. php数组中去掉空格,php数组去除空格的方法
  13. 怎么样通过API函数获取tooltip的内容(请高手帮忙)
  14. 端午节之苍南懒人游 (*^__^*) ……
  15. iOS 视频字幕srt文件解析
  16. 计算机关机界面卡住,win7关机卡死在正在关机界面
  17. 新媒体运营教程:名字都没起好,凭什么让用户关注你?
  18. 零基础自学平面设计需要学些什么?
  19. 多网卡情况,使用静态路由,为访问目标网络指定路径
  20. BUUCTF-pwn(15)

热门文章

  1. python字符串的方法和列表的方法_python字符串,列表,字符串,元组,集合的一些方法...
  2. linux系统硬盘数据恢复软件下载,R-Linux|R-Linux(linux数据恢复软件)下载 v5.1中文免费版 - 121下载站...
  3. 注册事件的两种方式(传统注册事件、方法监听注册事件)
  4. 实验4-1-3 找出最小值 (20 分)
  5. 表单标签 input
  6. vue.js高德地图实现热点图
  7. html标签acronym没用,acronym_废弃 | Obsolete_HTML_参考手册_非常教程
  8. 8月7日科技联播:人民日报发推欢迎Google回归,李彦宏回应非常有信心再赢一次...
  9. 细数魅族metal电信版手机3宗罪。
  10. 【李宏毅2020 ML/DL】P4 Basic Concept