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对应测试结果