【Go学习笔记13】解析yaml
2018-01-04 00:00
239 查看
【Go学习笔记13】解析yaml
在项目中,难免会用到配置文件,目前来说,yaml格式的配置文件应该是最流行的,那么在Go中如何来解析yaml配置文件呢。解析yaml文件
假设我们现在有一个config.dev.yaml的配置文件,里面的内容如下:version: 0.0.1
那么我们可以像下面这样来解析:
package main import ( "fmt" "log" "gopkg.in/yaml.v2" "io/ioutil" ) type Config struct { Version string `yaml:"version"` } func main() { t := Config{} buffer, err := ioutil.ReadFile("./config.dev.yaml") err = yaml.Unmarshal(buffer, &t) if err != nil { log.Fatalf(err.Error()) } fmt.Printf(t.Version) }
上面的代码中,首先定义了一个自定义类型Config,这个类型和yaml中的属性配置了映射,这样在后面解析的时候就可以将值设置到对应的属性上。在main方法中,首先通过ioutil的ReadFile方法来读取配置文件的数据,然后再调用yaml的Unmarshal方法来解析数据到对象t中,注意这里必须传递t的地址(&t),这种形式,否则会报错。
解析嵌套的yaml
上面的例子只是解析了最简单的,没有嵌套结果的yaml配置文件,但是在实际的开发过程中,嵌套的yaml配置文件经常出现。下面来看下如何解析嵌套的yaml配置文件。假设我们有一个config.dev.yaml的文件,内容如下:
version: 0.0.1author:
name: zhongzhong
age: 25
那么我们可以使用下面的代码来解析:
package main import ( "fmt" "log" "gopkg.in/yaml.v2" "io/ioutil" ) type Config struct { Version string `yaml:"version"` Author struct { Name string `yaml:"name"` Age int `yaml:"age"` } } func main() { t := Config{} buffer, err := ioutil.ReadFile("./config.dev.yaml") err = yaml.Unmarshal(buffer, &t) if err != nil { log.Fatalf(err.Error()) } fmt.Printf("%v",t) }
输出结果:
{0.0.1 {zhongzhong 25}}
将yaml配置内容解析到map对象中
上面的例子,我们都需要定义一个自定义类型,然后还需要配置映射,有时候感觉会很麻烦,那么我们就可以将yaml解析到一个map对象中。还是上面的配置内容,可以使用 下面的代码来将内容解析到一个map对象中:
package main import ( "fmt" "log" "gopkg.in/yaml.v2" "io/ioutil" ) func main() { t := map[string]interface{}{} buffer, err := ioutil.ReadFile("./config.dev.yaml") err = yaml.Unmarshal(buffer, &t) if err != nil { log.Fatalf(err.Error()) } fmt.Printf("%v",t) }
输出结果:
map[version:0.0.1 author:map[name:zhongzhong age:25]]
相关文章推荐
- c++学习笔记(13.专题三经典问题解析)
- go学习笔记(13)-基本语法-defer 与异常处理
- 黑马程序员_学习笔记13_asp.net之Session原理解析
- Nutch学习笔记13---以某网站为例写解析插件
- Java与Flex学习笔记(13)----Flex中解析地址栏传递的参数
- 基础学习笔记之opencv(13):基本绘图
- Go语言学习笔记4——struct
- spring学习笔记(7)AOP前夕[2]CGLib动态代理实例解析
- Scala类型约束代码实战及其在Spark中的应用源码解析之Scala学习笔记-39
- MatLab建模学习笔记13——主成分分析(PCA)
- javaweb学习笔记 mac中intellij 13如删除project
- iOS学习笔记(十一)——JSON数据解析
- Go语言学习笔记一: Hello World
- Go圣经-学习笔记之复合类型(三)
- Go语言学习笔记1 变量,类型以及赋值
- go学习笔记:golang实现的反向代理
- go学习笔记(4)
- OpenCV 2 学习笔记(13): 算法的基本设计模式<4> :使用Model-View-Controller模式创建一个应用程序
- date命令解析_学习笔记