使用 yaml.v2 检索结构的映射而不是结构的切片
Posted
技术标签:
【中文标题】使用 yaml.v2 检索结构的映射而不是结构的切片【英文标题】:Retrieving map of struct instead of slice of struct using yaml.v2 【发布时间】:2021-12-13 21:29:43 【问题描述】:我有一个 yaml 文件,其结构如下,无法更改。
fruit:
- cost: 10
name: apple
- cost: 20
name: banana
我为此创建了以下结构:
type T struct
Fruit []struct
Cost int `yaml:"cost"`
Name string `yaml:"name"`
`yaml:"fruit"`
当我使用 yaml.v2 将 yaml 解组到结构时,我正确地得到以下信息:
[10 apple 20 banana]
有没有一种方法可以获得结构的映射,这样我就不必为了找到苹果的成本而一次又一次地循环切片:
map[apple:apple 10 banana:banana 20]
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:作为一个选项,您可以实现自定义Unmarshaler
type T struct
Fruit map[string]Fruit
type Fruit struct
Cost int `yaml:"cost"`
Name string `yaml:"name"`
func (t *T) UnmarshalYAML(unmarshal func(interface) error) error
var tmpStruct struct
Fruit []Fruit `yaml:"fruit"`
err := unmarshal(&tmpStruct)
if err != nil
return err
fruit := make(map[string]Fruit, len(tmpStruct.Fruit))
for _, f := range tmpStruct.Fruit
fruit[f.Name] = f
*t = TFruit: fruit
return nil
PLAYGROUND
【讨论】:
以上是关于使用 yaml.v2 检索结构的映射而不是结构的切片的主要内容,如果未能解决你的问题,请参考以下文章
Go语言之读取yaml配置文件,转换成struct结构,json形式输出
ES 检索 wordpdf 文档插件 ingest attachment 的管道配置和文档结构映射