首页 > 解决方案 > 是否可以在包含地图名称的同时编组一个 go 结构?

问题描述

假设我有一个这样设置的 go 结构:

type TestStruct struct {
    ID string
    ConfigTest         map[string]Object
    
}

对象内部有 yaml/json 标签,用于编组(然后保存到文件中),如下所示:

type Object struct {
    ID          string  `yaml:"ID"`
    Value       float64 `yaml:"Value"`
}

因此,当我编组TestStruct.ConfigTest, 并将其保存到文件中时,ioutil.WriteFile()我得到如下输出:

obj1:
    ID: "Hello"
    Value: 1.2
obj2:
    ID: "World"
    Value: 3.4
...(etc)

但我真正想要的是编组,并像这样保存文件:

Objects:  
    obj1:
        ID: "Hello"
        Value: 1.2
    obj2:
        ID: "World"
        Value: 3.4
    ...(etc)

这可能吗?

标签: dictionarygoyamlmarshallingwrite

解决方案


您有两个基本选择:

重用TestStruct

更改TestStruct以在字段上添加适当的标签:一个跳过编组 ID,另一个将所需的名称赋予ConfigTest.

type TestStruct struct {
  ID string                             `yaml:"-"`
  ConfigTest         map[string]Object  `yaml:"Objects"`
}

使用包装结构:

如果您不能或不想修改TestStruct(即:因为它已经在其他地方封送),您可以使用包装器结构:

type WrapperStruct struct {
  ConfigTest         map[string]Object  `yaml:"Objects"`
}

并编组您的新包装器结构而不是MyStruct.


推荐阅读