我试图读取一个YAML文件,类似于我在Python中所做的事情。但是我不知道如何使用任意键。 我要阅读以下YAML:
apple:
name: item1
banana:
name: item2
我知道如何读取文件,但只能使用空接口。我想阅读它作为对我的商品类型的映射。
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
type Item struct {
Name string `yaml:"name"`
}
func main() {
input := `
apple:
name: item1
banana:
name: item2`
m := make(map[interface{}]interface{})
err := yaml.Unmarshal([]byte(input), &m)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("%v \n", m)
}
我在Stdout中得到的东西:
map[apple:map[name:item1] banana:map[name:item2]]
我想看的是:
map[apple:{item1} banana:{item2}]
如何将我的YAML文件读入商品地图?
答案 0 :(得分:3)
为使编组工作按您想要的方式进行,您应该提供说明。如果您不想在地图上命名,请提供解组结构。
因此m := make(map[interface{}]interface{})
应更改为m := make(map[string]Item)
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
type Item struct {
Name string `yaml:"name"`
}
func main() {
input := `
apple:
name: item1
banana:
name: item2`
m := make(map[string]Item)
err := yaml.Unmarshal([]byte(input), &m)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("%v \n", m)
}
输出:map[apple:{item1} banana:{item2}]
答案 1 :(得分:2)
您应该使用m := make(map[string]Item)
。