golang中的动态嵌套结构
Dynamic nested struct in golang
我想创建一个动态结构。我正在使用一些命令以 JSON 格式获取一些信息,并希望将其解组为一个结构。
Json 看起来像这样:
{
"blockdevices": [
{
"disk_name": "sda",
"mountpoint": null,
"size": "50G",
"fstype": "mpath_member",
"partitions": [
{
"disk_name": "sda1",
"mountpoint": null,
"size": "20G",
"fstype": "vfat"
},
{
"name": "3600a09803830566e615d5171774a3837",
"mountpoint": null,
"size": "50G",
"fstype": null,
"partitions": [
{
"disk_name": "3600a09803830566e615d5171774a3837-part1",
"mountpoint": "/myData",
"size": "20G",
"fstype": "vfat",
"partitions": [
{
"disk_name": "3600a09803830566e615d5171774a3837-part2",
"mountpoint": "/myData2",
"size": "10G",
"fstype": "vfat"
}
]
}
]
}
]
}
]}
问题是可能有 b 个未知的子分区,可以是 1 个,也可以是任意数量。
我创建了以下结构:
Blockdevices []struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint string `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint string `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
} `json:"partitions,omitempty"`
} `json:"partitions,omitempty"`
} `json:"partitions,omitempty"`
} `json:"blockdevices"`}
它最多适用于两个子分区,但我想要一个解决方案,无论我们有多少个子分区,它都可以工作。有什么办法吗?磁盘结构中的分区结构是相同的,我们能不能有点像写一次但它像循环一样工作?
提前致谢!
定义一个Partition
结构:
type Partition struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []Partition `json:"partitions"`
}
这可以使用分区切片根据需要嵌套。在 BlockDevice
.
中使用此类型
可以定义结构 recursively。为 Partition
定义一个单独的结构(作为一个受欢迎的副作用,这也使您的代码更易于处理,而不是在一个大的嵌套类型中定义整个 JSON 结构)并让该结构引用本身(请注意 Partition
类型中的 Partitions
属性):
type Blockdevice struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []Partition `json:"partitions"`
}
type Partition struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []Partition `json:"partitions"`
}
我想创建一个动态结构。我正在使用一些命令以 JSON 格式获取一些信息,并希望将其解组为一个结构。 Json 看起来像这样:
{
"blockdevices": [
{
"disk_name": "sda",
"mountpoint": null,
"size": "50G",
"fstype": "mpath_member",
"partitions": [
{
"disk_name": "sda1",
"mountpoint": null,
"size": "20G",
"fstype": "vfat"
},
{
"name": "3600a09803830566e615d5171774a3837",
"mountpoint": null,
"size": "50G",
"fstype": null,
"partitions": [
{
"disk_name": "3600a09803830566e615d5171774a3837-part1",
"mountpoint": "/myData",
"size": "20G",
"fstype": "vfat",
"partitions": [
{
"disk_name": "3600a09803830566e615d5171774a3837-part2",
"mountpoint": "/myData2",
"size": "10G",
"fstype": "vfat"
}
]
}
]
}
]
}
]}
问题是可能有 b 个未知的子分区,可以是 1 个,也可以是任意数量。 我创建了以下结构:
Blockdevices []struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint string `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []struct {
DiskName string `json:"disk_name"`
Mountpoint string `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
} `json:"partitions,omitempty"`
} `json:"partitions,omitempty"`
} `json:"partitions,omitempty"`
} `json:"blockdevices"`}
它最多适用于两个子分区,但我想要一个解决方案,无论我们有多少个子分区,它都可以工作。有什么办法吗?磁盘结构中的分区结构是相同的,我们能不能有点像写一次但它像循环一样工作?
提前致谢!
定义一个Partition
结构:
type Partition struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []Partition `json:"partitions"`
}
这可以使用分区切片根据需要嵌套。在 BlockDevice
.
可以定义结构 recursively。为 Partition
定义一个单独的结构(作为一个受欢迎的副作用,这也使您的代码更易于处理,而不是在一个大的嵌套类型中定义整个 JSON 结构)并让该结构引用本身(请注意 Partition
类型中的 Partitions
属性):
type Blockdevice struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
Partitions []Partition `json:"partitions"`
}
type Partition struct {
DiskName string `json:"disk_name"`
Mountpoint interface{} `json:"mountpoint"`
Size string `json:"size"`
Fstype string `json:"fstype"`
SubPartitions bool `json:"sub_partitions"`
Partitions []Partition `json:"partitions"`
}