当前位置: 首页 > 工具软件 > yaml.js > 使用案例 >

【Go库】yaml.v2解析库的基本使用说明

叶嘉颖
2023-12-01

yaml.v2

yaml 包使 Go 程序能够轻松地对 YAML 值进行编码和解码。它是在Canonical内部开发的,作为juju项目的一部分,基于著名的libyaml C 库的纯 Go 端口,可快速可靠地解析和生成 YAML 数据。

地址:yaml.v2
下面是github上的基本用例改编:

#yaml文件
listen: ':8050'
secret_key: 123
bowls: false
strslice:
  - 'asd'
  - 'qwe'
auth:
  - id: 'root'
    password: '456'
    roles:
      - 'admin'
  - id: 'cjs'
    password: '123'
    roles:
      - 'one'
keymap:
  a: 'xml'
  b: 'opi'
  c: 'edg'
package main

import (
	"fmt"
	"io/ioutil"
	"gopkg.in/yaml.v2"
	"log"
)

type user struct {
	Id       string   `yaml:"id"`
	Password string   `yaml:"password"`
	Roles    []string `yaml:"roles"`
}

type Config struct {
	Listen    string 		`yaml:"listen"`
	SecretKey int    		`yaml:"secret_key"`
	Boll      bool   		`yaml:"bowls"`
	StrSlice []string		 `yaml:"strslice"`
	Auth []user 			 `yaml:"auth"`
	KeyMap map[string]string `yaml:"keymap"`
}

func main() {
	
	data, err := ioutil.ReadFile("temp.yaml")
	if err != nil {
		return
	}
	
	conf := &Config{}
	if err := yaml.Unmarshal([]byte(data), &conf); err != nil {   //解析yaml文件
		return
	}
	fmt.Printf("--- m:%v\n",conf)

	
	d, err := yaml.Marshal(&conf)   //序列化yaml
	if err != nil {
		log.Fatalf("error: %v", err)
	}
	fmt.Printf("--- m dump:\n%s\n\n", string(d))

	return
}

yaml文件的序列化与反序列化,与json库的使用方式相同
yaml编写的语法需要自己学一下:YAML 入门教程
基本也就对象,也就是键值对(类似map)、数组、单独的纯量
再就上复杂的组合类型,都是从上边组合的,比较简单
可以使用YAML、YML在线编辑(校验)器进行校验是否正确

 类似资料: