我尝试使用Golang解析yaml
文件。我定义了以下types
:
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:
{{}}
我做错了什么?
答案 0 :(得分:1)
我的yaml
文件是docker-compose.yml
文件,其格式为上述格式(部分内容)。我同意Marius的说法,我有未经报道的字段,这是一个错误。我使用的解决方案是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)
答案 1 :(得分:0)
AFAIKT那里的东西,包含未导出字段的数据结构和与您的数据结构不匹配的测试数据。
这样的事情会让你感动:
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
很难说,什么是"工作"在你看来。