yaml包问题记录

yaml包问题记录

1. 错误!!map into xxxx

在使用yaml包时,其实就是key、value对应,key也就是冒号前的东西对应着tag中的yaml,value就是冒号下面的或者后面的对应着匹配yaml tag的对应字段,反序列化时,需要传类似结构体这样的类型,这样才能访问到tag,如下错误就是我直接用的需要反序列化的类型传入,导致无法识别到tag,切片的yaml的tag就应该为这个:前面的,然后把下面的带-的内容反序列化到tag对应的切片里面,反正一个冒号就要对应一个tag或者对应map[string]struct的string。

yaml文件为:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
正确操作为:传入包含它的结构体
在这里插入图片描述

2. 例子

yaml1:

123: //对应了map中的key string类型
  attributes: //这肯定对应的是value,这肯定对应一个tag,因为map对应的value没有tag,就只能是结构体中的tag,然后还是切片类型
    - foo
    - boo
    - coo

yaml2:

123:
#  attributes: //我直接不要这个tag,那就可以对应map[string][]string类型了
    - foo
    - boo
    - coo

测试代码

package main

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

type ENV struct {
	Attributes []string `yaml:"attributes"`
}

func TestTerraformAzureCosmosDBExample(t *testing.T) {

	yFile, err := ioutil.ReadFile("test.yaml")

	if err != nil {
		log.Fatal(err)
	}

	//data := make(map[string][]string) //yaml2对应的测试文件,分别注释就行
	data := make(map[string]ENV) //yaml1对应的测试文件

	err = yaml.Unmarshal(yFile, &data)
	if err != nil {
		log.Fatal(err)
	}
	for k, v := range data {
		fmt.Printf(`key: %v, value: %v`, k, v)
	}

}


yaml1对应测试结果

在这里插入图片描述

yaml2对应测试结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值