我正在尝试读取类似于我在 Python 中所做的 YAML 文件。但我不知道如何使用任意键。我有以下 YAML 我想阅读:
apple:
name: item1
banana:
name: item2
Run Code Online (Sandbox Code Playgroud)
我知道如何读入文件,但只使用空接口。我想将它作为我的项目类型的映射来阅读。
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)
}
Run Code Online (Sandbox Code Playgroud)
我在标准输出中得到了什么:
map[apple:map[name:item1] banana:map[name:item2]]
Run Code Online (Sandbox Code Playgroud)
我想看到的是:
map[apple:{item1} banana:{item2}]
Run Code Online (Sandbox Code Playgroud)
如何将我的 YAML 文件读入项目地图?
为了让解组以您想要的方式工作,您应该提供说明。在您的情况下,如果您不想在地图中命名,请提供一个要解组的结构。
所以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)
}
Run Code Online (Sandbox Code Playgroud)
输出: map[apple:{item1} banana:{item2}]
| 归档时间: |
|
| 查看次数: |
2408 次 |
| 最近记录: |