Parsing 使用Golang解析yaml文件
我正试图用Golang解析一个Parsing 使用Golang解析yaml文件,parsing,go,yaml,Parsing,Go,Yaml,我正试图用Golang解析一个yaml文件。我定义了以下类型: type DockerNetwork struct { MyNetwork struct { driver string } `yaml:"my_network"` } // DockerNetworks represent the docker Networks type type DockerNetworks struct { networks []DockerNetwork } 所以我有了我
yaml
文件。我定义了以下类型
:
type DockerNetwork struct {
MyNetwork struct {
driver string
} `yaml:"my_network"`
}
// DockerNetworks represent the docker Networks type
type DockerNetworks struct {
networks []DockerNetwork
}
所以我有了我的单元测试:
func TestDockerNetwork(t *testing.T) {
dn := DockerNetworks{}
var data = `
networks:
my_network:
driver: bridge
`
err := yaml.Unmarshal([]byte(data), &dn)
if err != nil {
log.Fatalf("error: %v", err)
t.Error("Could not Unmarshal the data")
}
log.Println(fmt.Sprintf("--- t:\n%v\n\n", dn))
}
我希望它能工作,但我没有得到任何意见:
2016/12/14 13:38:12 --- t:
{{}}
我做错了什么?有问题,有未报告字段的数据结构和与您的数据结构不匹配的测试数据 像这样的东西可以让你尝试一下:
type DockerNetwork struct {
MyNetwork struct {
Driver string `yaml:driver`
} `yaml:"my_network"`
}
type DockerNetworks struct {
Networks []DockerNetwork `yaml:networks`
}
测试数据:
networks:
- my_network:
driver: bridge
给出一个输出:
2016/12/14 23:47:23 --- t:
{[{{bridge}}]}
PASS
很难说,你认为什么是“有效的”。我的
yaml
文件是一个docker compose.yml
文件,格式如上所述(它的一部分)。我同意马吕斯的说法,我有未报告的字段,这是一个错误。我使用的解决方案是map
:
m := make(map[interface{}]interface{})
err = yaml.Unmarshal([]byte(data), &m)
if err != nil {
log.Fatalf("error: %v", err)
}
fmt.Printf("--- m:\n%v\n\n", m)
错误消息中究竟有什么不清楚的地方?您的YAML是一个映射,不能将映射解组到切片。那么也许可以使用映射?@Volker让我重新表述我的问题…@Volker我已经更新了我的问题您的结构中有未报告的字段,而您的yaml中仍然只有映射。您必须使用大写字母编写
网络
和驱动程序
字段,以使它们公开,这里的主要问题是输出来自一个docker compose.yml
文件,该文件将被解析并与docker go API一起使用。docker compose输出没有该格式。我用地图解决了这个问题。