gpt4 book ai didi

go - 解析嵌套 YAML Golang

转载 作者:数据小太阳 更新时间:2023-10-29 03:32:39 25 4
gpt4 key购买 nike

我正在尝试使用 go 解析一个简单的 YAML 文件,但我遇到了一些困难。

我的 YAML 文件如下。

key1:
attr1: "attr1"
attr2: "attr2"
attr3: "attr3"
list1: ["a", "b", "c"]
list2: ["d", "e", "f"]

我的 go 脚本看起来像这样。

package main

import (
"fmt"
"io/ioutil"
"log"

"gopkg.in/yaml.v2"
)

type keys struct {
Key1 map[string]key1 `yaml:"key1"`
}

type key1 struct {
Attr1 string `yaml:"attr1"`
Attr2 string `yaml:"attr2"`
Attr3 string `yaml:"attr3"`
List1 []string `yaml:"list1"`
List2 []string `yaml:"list2"`
}

func main() {
var d keys

source, err := ioutil.ReadFile("test_yaml.yaml")

if err != nil {
log.Fatal("Couldn't read yaml file.")
}

err = yaml.Unmarshal(source, &d)

if err != nil {
log.Fatal("Couldn't parse yaml file.")
}

fmt.Println(d)
}

当我运行它时,我的 map 是空的({map[]} 被打印)。如果我将键结构更改为 map[string]interface{} 它似乎获得了所有信息,但列表没有被正确解释,这就是我尝试定义内部结构的原因。

有谁知道为什么我的 key1 结构不起作用但 interface{} 起作用?

最佳答案

你的类型定义:

type keys struct {
Key1 map[string]key1 `yaml:"key1"`
}

type key1 struct {
Attr1 string `yaml:"attr1"`
Attr2 string `yaml:"attr2"`
Attr3 string `yaml:"attr3"`
List1 []string `yaml:"list1"`
List2 []string `yaml:"list2"`
}

暗示这个结构:

key1:
stuff:
attr1: "attr1"
attr2: "attr2"
attr3: "attr3"
list1: ["a", "b", "c"]
list2: ["d", "e", "f"]
morestuff:
attr1: "attr1"
attr2: "attr2"
attr3: "attr3"
list1: ["a", "b", "c"]
list2: ["d", "e", "f"]

因为,根据您的数据类型,key1 应该包含键到结构的映射 - 向层次结构添加一个不存在的级别。对于您发布的 YAML,您的结构应该是:

type keys struct {
Key1 key1 `yaml:"key1"`
}

type key1 struct {
Attr1 string `yaml:"attr1"`
Attr2 string `yaml:"attr2"`
Attr3 string `yaml:"attr3"`
List1 []string `yaml:"list1"`
List2 []string `yaml:"list2"`
}

关于go - 解析嵌套 YAML Golang,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com