是否可以在包含地图名称的同时编组 Go 结构?
Is it possible to marshal a Go struct while including a map name?
假设我有一个这样设置的 go 结构:
type TestStruct struct {
ID string
ConfigTest map[string]Object
}
对象内部有 yaml and/or 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)
这可能吗?
您有两个基本选择:
再利用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
。
假设我有一个这样设置的 go 结构:
type TestStruct struct {
ID string
ConfigTest map[string]Object
}
对象内部有 yaml and/or 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)
这可能吗?
您有两个基本选择:
再利用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
。